c语言 二维数组 递归函数问题 求高手帮助!!
inta[8][8]={{1,1,1,1,1,1,1,1},{1,1,0,0,1,0,0,1},{1,0,0,1,0,0,1,1},{1,1,1,0,0,1,0,1},{...
int a[8][8] = {{1,1,1,1,1,1,1,1},
{1,1,0,0,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,1,0,0,1,0,1},
{1,0,1,1,1,0,0,1},
{1,1,0,0,0,1,1,1},
{1,1,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1}};
对于任意的坐标i j
目标计算 a[i-1][j]+a[i-1][j+1]+a[i][j+1]+a[i+1][j+1]+a[i+1][j]+a[i+1][j-1]+a[i][j-1]+a[i-1][j-1];
但要求编写递归函数计算!!!
求大神帮助!! 展开
{1,1,0,0,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,1,0,0,1,0,1},
{1,0,1,1,1,0,0,1},
{1,1,0,0,0,1,1,1},
{1,1,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1}};
对于任意的坐标i j
目标计算 a[i-1][j]+a[i-1][j+1]+a[i][j+1]+a[i+1][j+1]+a[i+1][j]+a[i+1][j-1]+a[i][j-1]+a[i-1][j-1];
但要求编写递归函数计算!!!
求大神帮助!! 展开
3个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
//函数声明
int calculate(int (*a)[8]);
int main(void)
{
int a[8][8] = { {1,1,1,1,1,1,1,1},
{1,1,0,0,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,1,0,0,1,0,1},
{1,0,1,1,1,0,0,1},
{1,1,0,0,0,1,1,1},
{1,1,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1} };
int *p=&a[0][0];
int i,j,num;
printf("请输入元素为0的元素的两个下标:");
scanf("%d%d",&i,&j);
num = calculate( a , p , i , j );
if(num==-1)
{
printf("输入错误!\n");
}
else
{
printf("a[%d][%d] 周围有 %d 个 1 \n",i,j,num);
}
system("pause");
return 0;
}
//函数功能:计算数组中为 0 的元素周围 1 的个数
//函数参数:(*a)[8]为数组名,p为数组首元素地址,i,j 分别为元素的行、列下标
//返回值:m为1的个数
int calculate(int (*a)[8],int *p,int i,int j)
{
static int m=0;
if(p==&(a[8][8]) ||a[i][j]==1)
{
return -1;
}
if(p==&(a[i-1][j]) || p==&(a[i-1][j+1]) || p==&(a[i][j+1]) ||p==&(a[i+1][j+1]) || p==&(a[i+1][j]) ||p==&(a[i+1][j-1])
|| p==&(a[i][j-1]) || p==&(a[i-1][j-1]))
{
m+=*p;
}
calculate(a,p+1,i,j);
return m;
}
不知道这样满意不满意?
#include <stdlib.h>
//函数声明
int calculate(int (*a)[8]);
int main(void)
{
int a[8][8] = { {1,1,1,1,1,1,1,1},
{1,1,0,0,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,1,0,0,1,0,1},
{1,0,1,1,1,0,0,1},
{1,1,0,0,0,1,1,1},
{1,1,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1} };
int *p=&a[0][0];
int i,j,num;
printf("请输入元素为0的元素的两个下标:");
scanf("%d%d",&i,&j);
num = calculate( a , p , i , j );
if(num==-1)
{
printf("输入错误!\n");
}
else
{
printf("a[%d][%d] 周围有 %d 个 1 \n",i,j,num);
}
system("pause");
return 0;
}
//函数功能:计算数组中为 0 的元素周围 1 的个数
//函数参数:(*a)[8]为数组名,p为数组首元素地址,i,j 分别为元素的行、列下标
//返回值:m为1的个数
int calculate(int (*a)[8],int *p,int i,int j)
{
static int m=0;
if(p==&(a[8][8]) ||a[i][j]==1)
{
return -1;
}
if(p==&(a[i-1][j]) || p==&(a[i-1][j+1]) || p==&(a[i][j+1]) ||p==&(a[i+1][j+1]) || p==&(a[i+1][j]) ||p==&(a[i+1][j-1])
|| p==&(a[i][j-1]) || p==&(a[i-1][j-1]))
{
m+=*p;
}
calculate(a,p+1,i,j);
return m;
}
不知道这样满意不满意?
展开全部
任务谢谢合作,,,,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int a[8][8] = {{1,1,1,1,1,1,1,1},
{1,1,0,0,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,1,0,0,1,0,1},
{1,0,1,1,1,0,0,1},
{1,1,0,0,0,1,1,1},
{1,1,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1}};
int sum8(int i,int j,int n)
{
int s;
if(n==3) s=a[i-2][j]+a[i-4][j];
else
s=sum8(i+1,j,n+1)+a[i-1][j+1]+a[i-1][j-1];
return s;
}
void main()
{
int i,j;
printf("格式:i,j (0<i,j<7)\n");
scanf("%d,%d",&i,&j);
printf("%d\n",sum8(i,j,0));
}
这样的递归行不?
int a[8][8] = {{1,1,1,1,1,1,1,1},
{1,1,0,0,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,1,0,0,1,0,1},
{1,0,1,1,1,0,0,1},
{1,1,0,0,0,1,1,1},
{1,1,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1}};
int sum8(int i,int j,int n)
{
int s;
if(n==3) s=a[i-2][j]+a[i-4][j];
else
s=sum8(i+1,j,n+1)+a[i-1][j+1]+a[i-1][j-1];
return s;
}
void main()
{
int i,j;
printf("格式:i,j (0<i,j<7)\n");
scanf("%d,%d",&i,&j);
printf("%d\n",sum8(i,j,0));
}
这样的递归行不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询