这道题与P5731 蛇形方阵相似,只是在中心位置输出心脏,外面直接一圈一圈地循环就行了。
Code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, a[55][55];
int k = 1, x = 1, y;
signed main() {
cin >> n;
while (k < n * n) {
while (y < n && !a[x][y + 1]) a[x][ ++ y] = k ++ ;
while (x < n && !a[x + 1][y]) a[ ++ x][y] = k ++ ;
while (y > 1 && !a[x][y - 1]) a[x][ -- y] = k ++ ;
while (x > 1 && !a[x - 1][y]) a[ -- x][y] = k ++ ;
} // P5731部分
for (int i = 1; i <= n; i ++ , cout << '\n')
for (int j = 1; j <= n; j ++ ) {
if (i == j && i == (n + 1) / 2) cout << "T"; // 唯一不同之处
else cout << a[i][j];
putchar(' ');
}
}