魔幻矩阵 编程实现9*9以内任意奇数阶方阵的魔幻矩阵。 所谓奇数魔幻矩阵就是n*n的矩阵(n为奇数)的n*n个格子中放入数1到n*n,使得每行、每列、主对角线、付对角线上元素的和都相等。算法生成如下:: 1 ,第一个数字在第一行的中间位置 2,以后每一个数放在前一个数的右上方,,如果向上超出了界限,在矩阵的最后一行插入,列不变;,如果右侧超出了界限,在矩阵的最左边插入,行不变。 3.如果插入数的位置已经有数,则在前一个数的下方插入。. 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 输入提示:"input Magic matrix n:" 输入格式:"%d" 输出格式:"%4d" 程序运行示例: input Magic matrix n:4 9 15 1 7 14 4 6 8 3 5 11 13 0 10 12 2
- #include
-
- int main()
- {
- int a[9][9]={0},i,j=0,n;
- printf("input Magic matrix n:");
- scanf("%d",&n);
- int k;
- if(n%2!=0) k=(n-1)/2;
- else k=n/2;
- for(i=1;i<=n*n;i++)//n*n个数,从1开始依次填入矩阵
- {
- if(j<0) j=n-1;//j代表行,当j<0时,j为最后一行
- if(k>n-1) k=0;//k代表列,当k>n-1时,k变为第一列
- if(a[j][k]==0)//判断该位置是否已经填入了数字,若没填,则填入
- {
- a[j][k]=i;
- }
- else//若已经填入了数字,则填到前一个数的下方
- {
- j=j+1+1;//j+1为前一个数的行,j+1+1为前一个数的下方
- k=k-1;//k-1为前一个数的列
- if(j>n-1) j=j-n;//当j=n或者n+1时,实际上为第一行和第二行
- if(k<0) k=n-1;//当k=-1时,实际上k=n-1即最后一列
- a[j][k]=i;
- }
- j=j-1;
- k=k+1;
- }
- for(i=0;i
//打印该魔幻矩阵 - {
- for(j=0;j
- {
- printf("%4d",a[i][j]);
- }
- printf("\n");
- }
- return 0;
- }