c语言奇数魔方阵

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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:

相关文档
最新文档