读书人

魔方递规程序找错

发布时间: 2012-11-20 09:55:43 作者: rapoo

魔方递归程序找错
#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);
}
这是魔方高度为奇数情况的递归程序。运行出现错误。能帮忙找出吗?请务必帮忙。

[解决办法]

C/C++ code
#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");        }    }} 

读书人网 >C语言

热点推荐