算法知识点: 模拟

复杂度:

解题思路:

直接按照题目给出的填数步骤模拟一遍即可。

时间复杂度分析:

总共有 n2 个数,每个数只被填写一遍,所以总时间复杂度是

C++ 代码

#include <iostream>
using namespace std; const int N = 40;
 
int a[N][N];
 
int main()
{
    int n;
    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;
}


另外,牛客暑期NOIP真题班限时免费报名
报名链接:https://www.nowcoder.com/courses/cover/live/248
使用优惠券免费报名:DCYxdCJ