有关c语言魔方阵改错题,请朋友帮帮忙?

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:15:01
N行N列魔方阵,其构成法则:
第一,阶数必须是奇数(n>3);
第二,将“1”放在第一行的中间一列;
第三,从“2”开始只到n*n各数依次按下里列规则存放:每一个数存放的行比前一个数的行数减1,列数加1;
第四,如果上一个数的行数为 1,则下一个数的行数为n,列数加1;
第五,如果上一个数的列数为n,则下一个数的列数为1,行数减1;
第六,如果上面规则确定的位置上已经有数,或者上一个数是第1行第n列时
,则把下一个数放在这一个数下面。
源程序如下:
main()
{
int R[15][16],i,j,k,p,m,n;
p=1;
while(p==1)
{printf("Please inter n,(0<n<=15 and n%@==1)\n");
scanf("%d",&n);
if(n%2==1&&n<=15)
{printf("jie shu shi:%d\n",n);
p=0;}
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
R[i][j]=0;
j=n/2+1;
R[1][j]=1;
for(k=2;k<=n*n;k++)
{ i--;j++;
if( ) /*这里应该写什么呢?*/
{i=i+2;j++;}
else
{if(i<1) i=n;
if(j>n) j=1;
}
if(R[i][j]==0) R[i][j]=k;
else
{i=i+2;
j--;
R[i][j]=k;
}
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)

给你个正确的,你给的程序错误太多,改不如写:
#define N 16
main()
{
int a[N][N];
int n,i,j,r,sum=0;
scanf("%d",&n);
for(i=0;i<N;i++) for(j=0;j<N;j++) a[i][j]=0;
i=0;
j=n/2;
a[i][j]=1;

for (r=2;r<=n*n;r++)
if (!a[(i+n-1)%n][(j+1)%n])
{
i=(i+n-1)%n;
j=(j+1)%n;
a[i][j]=r;
}
else
{
i=(i+1)%n;
a[i][j]=r;
}

for(i=0;i<n;i++)
{
for(j=0;j<n;j++) {
printf("%4d",a[i][j]);
sum+=a[i][j];
}
printf("\n");
printf("sum=%d\n",sum);
}

}