用一个程序实现n*n魔方矩阵中,每一行、每一列、每一对角线上的元素之和相等。
矩阵规律:
本程序只适合基数,解释如下:
N 为奇数时,此题中N设为5
(1) 将1放在第一行中间一列;
(2) 从2开始直到n×n止各数依次按下列规则存放:
按 45°方向行走,如向右上
每一个数存放的行比前一个数的行数减1,列数加1
(3) 如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最下一行,列数同样加1;
(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
- #include<stdio.h>
- int main()
- {
- int a[100][100],x;/*初始化*/
- int i,j,m,n,temp;
- printf("输出魔方矩阵n=");
- scanf("%d",&x);
- while(x)
- {
- if(!(x%2))
- {
- printf("你输入了偶数,很遗憾本程序将退出");
- return 0;
- }
- else
- {
- for(i=0;i<x;i++)
- for(j=0;j<x;j++)
- a[i][j]=0;
- i=0;
- j=x/2;
- a[i][j]=1;
- for(temp=2;temp<=x*x;temp++)
- {
- m=i;
- n=j;
- i--;
- j++;
- if(i<0)
- i=x-1;
- if(j>=x)
- j=0;
- if(a[i][j]!=0)
- {
- i=m+1;
- j=n;
- }
- a[i][j]=temp;
- }
- }
- for(i=0;i<x;i++)
- {
- for(j=0;j<x;j++)
- printf("%4d",a[i][j]);
- printf("\n");
- }
- printf("输出魔方矩阵n=");
- scanf("%d",&x);
- }
- return 0;
- }