神奇的幻方
2024年12月25日小于 1 分钟
基础写法
略
递归写法
#include <bits/stdc++.h>
using namespace std;
int n;
int a[40][40];
void f(int x, int y, int num)
{
if (num > n * n)
return;
a[x][y] = num;
if (x == 1 && y != n)
f(n, y + 1, num + 1);
else if (y == n && x != 1)
f(x - 1, 1, num + 1);
else if (x == 1 && y == n)
f(x + 1, y, num + 1);
else
{
if (a[x - 1][y + 1] == 0)
f(x - 1, y + 1, num + 1);
else
f(x + 1, y, num + 1);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
f(1, n / 2 + 1, 1);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
cout << a[i][j] << " ";
cout << "\n";
}
return 0;
}