其他分享
首页 > 其他分享> > 【C语言】魔方阵

【C语言】魔方阵

作者:互联网

打印魔方阵,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为:
	8 1 6
	3 5 7
	4 9 2
要求打印出由1到n2的自然数构成的魔方阵(n为奇数)。
魔方阵中各数的排列规律如下:
(1)将1放在第一行中间一列;
(2)从2开始直到n×n,各数依次按下列规律存放:每一个数存放的行比前一个数的行数减1,列数加1;
(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1;
(5)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
**输入数据格式:"%d"
**输出格式要求:"%3d"
程序的运行示例如下:
请输入n(0<n<=15,n是奇数):5
矩阵阶数是:5
 17 24  1  8 15
 23  5  7 14 16
  4  6 13 20 22
 10 12 19 21  3
 11 18 25  2  9

 1 #include<stdio.h>
 2 
 3 int main()
 4 { 
 5     int a[15][15],i=0,j=0,k=0,p=0,n=0;
 6       p=1;
 7       while(p==1)
 8     {
 9         printf("请输入n(0<n<=15,n是奇数):\n");
10          scanf("%d",&n);
11          if ((n>=0) && (n<=15) && (n%2!=0))
12                p=0;
13     }
14     printf("矩阵阶数是:%d\n",n);
15       for(i=1;i<=n;i++)   //初始化操作 
16       {
17           for(j=1;j<=n;j++)
18             a[i][j]=0;
19     }
20     j=n/2+1;
21       a[1][j]=1;
22       for(k=2;k<=n*n;k++)
23     {
24         i=i-1;
25         j=j+1;
26         if((i<1)&&(j>n))
27         {
28             i=i+2;
29             j=j-1;
30         }
31          else
32            {
33             if(i<1)
34                 i=n;
35              if(j>n)
36                 j=1;
37            }
38          if(a[i][j]==0)
39          {
40              a[i][j]=k;
41         }    
42          else
43            {
44             i=i+2;
45              j=j-1;
46              a[i][j]=k;
47        }
48     }
49       for (i=1;i<=n;i++)
50       {    
51           int sum=0;
52         for (j=1;j<=n;j++)
53         {
54             printf("%3d",a[i][j]);
55             sum+=a[i][j];
56         }    
57         printf("\n");
58     }
59     printf("\n\n");
60   return 0;
61 }

 

 

标签:一个,C语言,int,行数,else,方阵,各数
来源: https://www.cnblogs.com/20201212ycy/p/14903851.html