找题目模拟就行
#include <iostream>
#include <cstdio>
#define SIZE (int)39 + 10
using namespace std;
int map[SIZE][SIZE];
void f1(const int &);
int main() {
freopen("cpp.in", "r", stdin);
freopen("cpp.out", "w", stdout);
scanf("%d", &map[0][0]);
f1(map[0][0]);
for (int i = 1; i <= map[0][0]; ++i) {
for (int j = 1; j <= map[0][0]; ++j) {
printf("%d ", map[i][j]);
}
printf("\n");
}
return 0;
}
void f1(const int &n) {
int i = 1, j = (n >> 1) + 1;
map[1][(n >> 1) + 1] = 1;
for (int k = 2; k <= n * n; ++k) {
if (i == 1 && j != n)
i = n, ++j;
else if (j == n && i != 1)
j = 1, --i;
else if (i == 1 && j == n)
++i;
else
if (map[i - 1][j + 1] == 0)
--i, ++j;
else
++i;
map[i][j] = k;
}
}