网站开发语言字典,海外广告推广,网站数据模版,一个app开发大概要多少钱目录
一、奇数
二、双偶
三、双偶 魔方阵#xff0c;是指组成元素为自然数1、2、…、n2的平方的nn的方阵#xff0c;其中每个元素值都不相等#xff0c;且每行、每列以及主、副对角线上各n个元素之和都相等。
魔方阵的规律
一、奇数
阶数为奇数n#xff08;n 1,3,5.…目录
一、奇数
二、双偶
三、双偶 魔方阵是指组成元素为自然数1、2、…、n2的平方的n×n的方阵其中每个元素值都不相等且每行、每列以及主、副对角线上各n个元素之和都相等。
魔方阵的规律
一、奇数
阶数为奇数nn 1,3,5...
1将1放在第一行中间一列。 2从2开始到n*n每一个数存放的行在之前一个数的行数减1列数加1。如果当前数字在第一行那么下一个数字的行数就在最后一行同理如果数字在最后一列那么下一个数字的列数就在第一列。 3当前数字的位置已经被之前的数字占据了位置则防放在前一个数字的下一行同一列。
代码如下
#define ROW 3
void SMagicSquare()
{int arr[ROW][ROW] {0};arr[0][ROW/2] 1;//将第一个数字放在第一行中间一列int currow 0;//当前数据存放的行int curcol ROW/2;//当前数据存放的列int i 0;int j 0;for(int i 2;i ROW*ROW;i){if(arr[(currowROW-1)%ROW][(curcol1)%ROW] ! 0){currow (currow1ROW) %ROW;}else{currow (currow-1ROW) %ROW;curcol (curcol1ROW)%ROW;}arr[currow][curcol] i;}//打印此方阵for(int i 0;iROW;i){for(int j 0;jROW;j){printf(%-5d,arr[i][j]);}printf(\n);}
}
二、双偶
阶数为4nn1,2,3...
1 将整个方阵划分成k*k个4阶方阵然后在每个4阶方阵的对角线上做记号
2 由左而右、由上而下遇到没有记号的位置才填数字但不管是否填入数字每移动一格数字都要加1
3 自右下角开始由右而左、由下而上遇到没有数字的位置就填入数字但每移动一格数字都要加1。
代码如下
#define N 4
void DDMagicSquare()
{int arr[N][N] {0};int i;int j;int lvalue 1;int rvalue N*N;for(i 0;iN;i){for(j 0;jN;j){if(i%4 j%4 || (ij)%4 3){arr[i][j] rvalue;}else{arr[i][j] lvalue; }lvalue;rvalue--;}}for(i 0;iN;i){for(j 0;jN;j){printf(%-3d,arr[i][j]);}printf(\n);}
}
三、双偶
阶数为4n2n1,2,3...
1将整个方阵划分成k*k个4阶方阵这四个方阵都为奇方阵利用上面讲到的方法依次将A、D、B、C填充为奇魔方。
2交换交换A、C魔方元素对魔方的中间行交换从中间列向右的n列各对应元素对其他行交换从左向右n列各对应元素。
3交换B、D魔方元素交换从中间列向左m – 1列各对应元素。
代码如下
#define MAX 10void SDMagicSquare()
{int i 0;int j 0;int arr[MAX][MAX] {0};arr[0][MAX/4] 1;int currow 0;int curcol MAX/4;//左上方阵/for(i 2;iMAX*MAX/4;i){if(arr[(currow-1MAX/2)%(MAX/2)][(curcol1)%(MAX/2)] ! 0){currow (currow1)%(MAX/2);}else{currow (currow-1MAX/2)%(MAX/2);curcol (curcol1)%(MAX/2);}arr[currow][curcol] i;}//右上方阵/arr[MAX/2][MAX*3/4] MAX*MAX/41;currow MAX/2;curcol MAX*3/4;for(i MAX*MAX/42;iMAX*MAX/2;i){if(arr[(currow-1MAX/2)%(MAX/2)MAX/2][(curcol1MAX/2)%(MAX/2)MAX/2] ! 0){currow (currow1)%(MAX/2)MAX/2;}else{currow (currow-1MAX/2)%(MAX/2)MAX/2;curcol (curcol1)%(MAX/2)MAX/2;}arr[currow][curcol] i;}//左下方阵/arr[0][MAX*3/4] MAX*MAX/21;currow 0;curcol MAX*3/4;for(i MAX*MAX/22;iMAX*MAX*3/4;i){if(arr[(currow-1MAX/2)%(MAX/2)][(curcol1MAX/2)%(MAX/2)MAX/2] ! 0){currow (currow1)%(MAX/2);}else{currow (currow-1MAX/2)%(MAX/2);curcol (curcol1)%(MAX/2)MAX/2;}arr[currow][curcol] i;}//右下方阵/arr[MAX/2][MAX/4] MAX*MAX/4*31;currow MAX/2;curcol MAX/4;for(i MAX*MAX/4*32;iMAX*MAX;i){if(arr[(currow-1MAX/2)%(MAX/2)MAX/2][(curcol1MAX/2)%(MAX/2)] ! 0){currow (currow1)%(MAX/2)MAX/2;}else{currow (currow-1)%(MAX/2)MAX/2;curcol (curcol1)%(MAX/2);}arr[currow][curcol] i;}int k MAX/4;//k用来记录小方阵的中间位置int tmp 0;for(i 0;iMAX/2;i){for(j 0;jMAX;j){if(i k jk j2*k-1)//交换A,C方阵中间一行对应的数字{tmp arr[i][j];arr[i][j] arr[iMAX/2][j];arr[iMAX/2][j] tmp;}if(i ! k j0 jk)//交换A,C方阵其他行对应的数字{tmp arr[i][j];arr[i][j] arr[iMAX/2][j];arr[iMAX/2][j] tmp;}if(j MAX/2MAX/4-k2 j MAX/2MAX/4)//交换B,D方阵中间一列对应的数字{tmp arr[i][j];arr[i][j] arr[iMAX/2][j];arr[iMAX/2][j] tmp;}}}for(i 0;iMAX;i){for(j0;jMAX;j){printf(%-5d,arr[i][j]);}printf(\n);}
}