天天看点

给一个奇数阶N幻方,填入数字1,2,3.N^N,使得橫竖斜方向上的和都相同

给一个奇数阶N幻方,填入数字1,2,3.N^N,使得橫竖斜方向上的和都相同
#inc1ude<iostream>
#include<iomanip>
#include<cmath>
usingnamespace std;
int main() 
{
int n;
cin>>n;
int i;
int **Matr = new int *[n]; //动态分配二维数组
for(i=0;i<n;++i)
Matr[i]=new int[n]: //动态分配二维
数组
//j=n/2代表首行中间数作为起点,即1所在位置
int j=n/2,num=1: //初始值
i=0;
while(num!=n*n+1) {
//往右上角延升, 若超出则用%转移到左下角
Matr [(i%n+n)%n][(j%n+n)%n]=num;
//斜行的长度和n是相等的,超出则转至下一写信.
if (num%n==0) {
i++;
} else {
i--;
j++;
}
num++;
}
for (i=0;i<n;i++) {
for (j=0;j<n;++j) {
cout << setw((int)log10(n*n)+4)<<Matr[i][j]; //格式控制
cout <<endl<<endl;//格式控制
}
}
for (i=0; i<n; ++i) {
delete [] Matr[i];
}
return 1;
}

## 2020年更多、更全、更新大厂面试资料,欢迎+群学习交流,个人简介信息加群领取

           

继续阅读