打印魔方阵(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
#include<stdio.h> int main() { int a[16][16],i=0,j=0,k=0,p=0,n=0; p=1; while(p==1) { printf("请输入n(0<n<=15,n是奇数):\n"); scanf("%d",&n); if ((n>=0) && (n<=15) && (n%2!=0)) p=0; } printf("矩阵阶数是:%d\n",n); for(i=1;i<=n;i++) //初始化操作 { for(j=1;j<=n;j++) a[i][j]=0; } j=n/2+1; a[1][j]=1; for(k=2;k<=n*n;k++) { i=i-1; j=j+1; if((i<1)&&(j>n)) { i=i+2; j=j-1; } else { if(i<1) i=n; if(j>n) j=1; } if(a[i][j]==0) { a[i][j]=k; } else { i=i+2; j=j-1; a[i][j]=k; } } for (i=1;i<=n;i++) { int sum=0; for (j=1;j<=n;j++) { printf("%3d",a[i][j]); sum+=a[i][j]; } printf("\n"); } printf("\n\n"); return 0; }