#include<iostream>
#include<iomanip>
#include<memory>
using namespace std;
int main(int argc, char **argv)
{
cout << "请输入幻方的大小n(n是一个大于1的奇数):";
int n = 1;
cin >> n;
cout << endl;
int **a = new int *[n]; // 创建动态二维数组
for (int i = 0; i < n; ++i) {
a[i] = new int[n];
memset(a[i], 0, n * sizeof(int));
}
int row = 0;
int col = n / 2;
for (int i = 1; i <= n*n; i++) {
a[row][col] = i; // 1 居上行正中央
row--;
col++; // 依次斜填切莫忘 从右上开始 (左上开始应该也可以0.0)
if (row < 0 && col >= n) // 判断边界
{
col--;
row += 2;
}
else if (row < 0) //上出框时向下放
{
row = n - 1;
}
else if (col >= n)//右框出时向左排
{
col = 0;
}
else if (a[row][col] != 0) // 重排便在下格填
{
col--;
row += 2;
}
}
for (int i = 0; i < n; i++)// 控制 输出
{
for (int j = 0; j < n; j++)
cout << setw(6) << a[i][j];
cout << endl;
}
for (int i = n; i > 0;) // 删二维数组 这样删;
delete[] a[--i];
delete[] a;
return 0;
}
幻方问题求解
最新推荐文章于 2023-03-02 10:06:02 发布