- /*
- 给出n值,输出n阶魔方阵(每一行,每一列和对角线之和都相等)
- 1放在第一行中间
- 从2开始以后的数按以下规则:
- 每个数比前一个数行数减一,列数加一
- 当上一个数行数为1,下一个数行数为n
- 当上一个数列数为n,下一个数列数为1
- 如果按以上规则确定的位置上已经有数,或上一个数为第一行第n列,把下一个数放在上一个数的下面
*/
#include<stdio.h>
int main()
{
int n,i,j;
int x,y;
int p,q;
int a[20][20]={0};
printf("输入一个奇数:");
scanf("%d",&n);
x = 0;
y = (n-1)/2;
a[x][y]=1;
for(i=2;i<=n*n;i++){
p=x;q=y;
x=x-1;
y=y+1;
if(x== -1&&y==n){
x=p+1;
y=q;
a[x][y] = i;
}
else if(x== -1&&y<=n-1){
x = n-1;
if(a[x][y]!=0){
x = p+1;
y = q;
}
a[x][y] = i;
}
else if(x>=0&&y==n){
y = 0;
if(a[x][y]!=0){
x = p+1;
y = q;
}
a[x][y] = i;
}
else if(x>=0&&y<=n-1){
if(a[x][y]!=0){
x = p+1;
y = q;
}
a[x][y] = i;
}
}
for(i=0;i<=n-1;i++){
for(j=0;j<=n-1;j++){
printf("%4d",a[i][j]);
}
printf("\n");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)