64,654
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
int main() {
int k;
cout << "你希望得到的幻方阶数是(空格间隔的>=1个<=99的奇数,最后以0结束):" << endl;
while (1) {
cin >> k;
if (k==0) break;
int num[99][99] = { 0 };
int m = 0;
int n = (k-1)/2;
num[0][(k-1)/2] = 1;
for (int i = 2; i <= k*k; i++) {
m--;
n++;
if (m == -1 && n != k)//判上
{
m = m + k;
num[m][n] = i;
} else if (n == k && m != -1)//判右
{
n = n - k;
num[m][n] = i;
} else if (m == -1 && n == k)//判右上顶角
{
m = m + 2;
n = n - 1;
num[m][n] = i;
} else if (num[m][n] != 0)//判右上有数
{
m = m + 2;
n = n - 1;
num[m][n] = i;
} else//通性右上
{
num[m][n] = i;
}
}
for (m = 0; m <k; m++)//输出
{
for (n = 0; n <k; n++) {
cout << num[m][n] << "\t";
}
cout << endl;
}
cout << endl;
}
return 0;
}
//提示:你希望得到的幻方阶数是(空格间隔的>=1个<=99的奇数,最后以0结束):
//输入:3 5 0
//输出:
//8 1 6
//3 5 7
//4 9 2
//
//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
//
//