#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
.
#include<stdio.h>void main(){
int i,j,n,row,col,a[11][11]
printf("please input n:")
scanf("%d",&n)
col=n/2//
row=0//
for(i=1i<=n*ni++){ //i<=n*n,楼主写错了,如果想保持为<可做相应修改
if(row==-1) // 不明白再联系吧
row=n-1
if(col==n)
col=0 //
a[row][col]=i//
if(i%n==0)
row++
else{
row--
col++
}
}
for(i=0i<ni++){
for(j=0j<nj++)
printf("%10d",a[i][j])
printf("\n")
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)