算法
(模拟) $O(n^2)$
直接按照题目给出的填数步骤模拟一遍即可。
时间复杂度分析
总共有 $n^2$ 个数,每个数只被填写一遍,所以总时间复杂度是 $O(n^2)$。
C++ 代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 40;
int n;
int a[N][N];
int main()
{
cin >> n;
int x = 1, y = n / 2 + 1;
for (int i = 1; i <= n * n; i ++ )
{
a[x][y] = i;
if (x == 1 && y == n) x ++ ;
else if (x == 1) x = n, y ++ ;
else if (y == n) x --, y = 1;
else if (a[x - 1][y + 1]) x ++ ;
else x --, y ++ ;
}
for (int i = 1; i <= n; i ++ )
{
for (int j = 1; j <= n; j ++ ) printf("%d ", a[i][j]);
puts("");
}
return 0;
}
好
b( ̄▽ ̄)d