魔方递归程序找错
#include<stdio.h>
#define max_size 15
void display(int **array0,int n)
{
}
void magic(int i,int j,int k,int s,int**array1)
{int row,column;
if(k==s*s)
{for(i=0;i<s;i++)
for(j=0;j<s;j++)
printf("%5d",array1[i][j]);
printf("\n");
}
else
{row=(i==0)?(s-1):(i-1);
column=(j==0)?(s-1):(i-1);
i=(array1[row][column]==0)?(s-1):(i-1);
j=(j==0)?(s-1):(--j);
array1[i][j]=k;
magic(i,j,k+1,s,array1);
}
}
void main(void)
{int **array1;
int i,j,k,n;
printf("input the magic cube size:");
scanf("%d,&n");
if(n>max_size||n<1)
printf("the size of magic cube is beyond max_size.");
if(!(n%2))
printf("n is even.");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",*((int*)array1+i*n+j));
printf("\n");
}
i=0;
j=n/2;
k=2;
array1[i][j]=1;
magic(i,j,k,n,array1);
}
这是魔方高度为奇数情况的递归程序。运行出现错误。能帮忙找出吗?请务必帮忙。
[解决办法]
#include<stdio.h>#define max_size 15void main(){ int array[max_size][max_size]; int i,j,n,count=2; printf("enter the size of the square:"); scanf("%d",&n); while(n<1||n>max_size) { printf("Improper number n,please enter again!\n"); scanf("%d",&n); } for(i=0;i<n;i++) for(j=0;j<n;j++) array[i][j]=0; array[0][(n-1)/2]=1; i=0; j=(n-1)/2;}void magic_cube(int*(*p),int size,int i,int j,int count){ int row,column; int **temp; temp=p; if(count<=size*size) { row=(i-1<0)?(size-1):(i-1); //up column=(j-1<0)?(size-1):(j-1); //left if(*(*(p+row)+column)) //down i=(++i)%size; else { i=row; j=(j-1<0)?(size-1):--j; } *(*(p+i)+j)=count; magic_cube(p,size,i,j,count);//你所要改的 ,这是调用,不是声明 } else { p=temp; for(i=0;i<size;i++) { for(j=0;j<size;j++) printf("%5d",*(*(p+i)+j)); printf("\n"); } }}