20_二维数组_输出魔方阵

来源:互联网 发布:wifi监控器软件下载 编辑:程序博客网 时间:2024/06/11 17:12
//_20_二维数组//_20_main.cpp//输出魔方阵:各行各列以及对角线元素相加之和相等#include <stdio.h>#include <stdlib.h>int main(){int intArray[16][16];//因为魔方阵最大只能为15*15,故用16*16规格,[0][0]不用int n;//魔方阵规模int m=1;//便于利用while循环while(m==1){printf("请输入n(0<n<=15),且n为奇数\n");scanf("%d",&n);//魔方阵要求n为15以内的奇数if((n!=0)&&(n<=15)&&(n%2!=0)){printf("矩阵的阶数为%d.\n",n);m=0;//循环终止,如果n不满足条件,则循环继续}}//数组赋值for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)intArray[i][j]=0;/*魔方阵存放规则:1、将1放在第一行中间的一列2、从2开始直到n*n为止,每个数字存放的个数的行数减一,列数加一3、如果上一个数的行数为1,则下一个数的行数为n4、当上一个数的列数为n,下一个数的列数应为15、如果按照上面规则确定的位置上已经有数,或者上一个数是第一行第n列时,     则把下一个数放到上一个数的下面*///建立魔方阵int i=1;int j=n/2+1;//列数intArray[1][j]=1;//规则1for(int k=2;k<=n*n;k++){i = i - 1;//行减一      //规则2j = j + 1;//列减一if((i<1)&&(j>n))        //规则5{i = i + 2;//行加二j = j - 1;//列减一}else{if(i<1)  i = n;         //规则3;if(j>n)j = 1;         //规则4}if(intArray[i][j] == 0)intArray[i][j] = k;else{i = i + 2;    //规则5j = j - 1;intArray[i][j] = k;}}//输出魔方阵for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)printf("%4d",intArray[i][j]);printf("\n");}system("pause");return 0;}

0 0