#include<stdio.h>
int main()
{int n=0,i,j,k=1,p,q,a[20][20]={0}
while(!(n%2))
{printf("请输入一个小于20的奇数:")
scanf("%d",&n)
}
i=0
j=n/2
for(p=0p<np++)
{for(q=0q<nq++)
{if(q>0)
{i=(i+n-1)%n
j=(j+1)%n
}
a[i][j]=k++
}
i=(i+1)%n
}
for(i=0i<ni++)
{for(j=0j<nj++)
printf("%4d",a[i][j])
printf("\n")
}
return 0
}
首先魔方阵是一个奇数行列式方阵,它的一行,一列,对角线的和都相等。建立魔方阵的第一步是确定1的位置,它是第一行的中间列,之后要确定其他位置的值,
问题1:if((i<1)&&(j>n))时,说明你确定的位置已经超出了魔方阵,所以要用i=i+2j=j-1把它拉回的魔方阵内,
问题2:判断第i行地j列的值是否等于0(即是否被填充),如果没填充,就填k,如果填充,再寻找下一个位置,
问题3:因为你的主函数main()前面的返回值为int,所以要提供返回值,那不是return=0,而是return
0就是返回0,也可以返回1,这没关系的,如果不想要也行,那得把main()前面的int
改为void
.
你这输出的是啥……printf("%3d",&a[i][j])→printf("%3d",a[i][j])
还有这里:
if(x%5==0){
i=i1+1
j=j1
}
如果i=i1+1之后i==n+1了呢?