c语言奇数魔方阵
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
魔方阵,古代又称“纵横图”,是指组成元素为自然数
1、"2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。
如3×3的魔方阵:
8 1 6 =15
3 5 7 =15
4 9 2 =15
|| || ||
15 15 15 15(对角线)
魔方阵的排列规律(奇数阵):
1.将1放在第一行中间一列。
2.从2开始直到n×n止各数依次按下列规则存放:
每一个数存放的行比前一个数的行数减1,列数加
1。"
3.如果上一个数的行数为1,则下一个数的行数为n,列数加
1。"如果上一个数的列数的n时,下一个数的列数为1,行数减
1。"
4.如果按上面的规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。
#include
main()
{ int a[16][16],i,j,k,p,n;
while(p==1)/*要求阶数为1~15的奇数*/{ printf("Enter n(n=1~15):
");
scanf("%d",&n);
if((n!=0)&&(n<=15)&&(n%2!=0)) p=0;}for(i=1;i<=n;i++)/*初始化*/
for(j=1;j<=n;j++) a[i][j]=0;
j=n/2+1;/*建立魔方阵*/
a[1][j]=1;
i=1;
for(k=2;k<=n*n;k++)
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))/*上一个数是第一行第n列时,则把下一个数放在上一个数的下面*/
{ i=i+2;
j=j-1;}else
{ if(i<1) i=n;/*上一个数的行数为1,则下一个数的行数为n,上一个数的列数的n时,下一个数的列数为1*/
if(j>n) j=1;}if(a[i][j]==0) a[i][j]=k;
else
{ i=i+2;/*如果按上面的规则确定的位置上已有数,则把下一个数放在上一个数的下面*/
a[i][j]=k;}}
for(i=1;i<=n;i++)/*输出魔方阵*/ { for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");}}
n=5: