top1编程
← 返回题目
题解

站方阵

1 条题解

  • 0
    @ 2026-8-5 14:24:32

    解题思路

    这道题是二维数组入门里最经典的“按顺序填数”。

    1. 题意

    学生从 1 号开始往后编号,体育老师让他们按“先站满第 1 行,再站第 2 行……”的顺序站成 n×n 的方阵。我们要模拟这个过程并输出。

    2. 怎么模拟?

    用一个变量 num,一开始等于 1,代表现在站的是 1 号学生。然后:

    • 第 1 行第 1 列站 1 号,num 变成 2;
    • 第 1 行第 2 列站 2 号,num 变成 3;
    • ……依次下去,每站一个学生 num 就加 1。

    等 n 行都站完,num 刚好等于 n×n+1。

    3. 输出格式

    每行的数字之间用空格隔开,每行结束后换行。注意最后一个数字后面不要多输出空格(用 j<n 判断)。

    4. 对照样例

    n=4 时输出:

    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 16
    

    和样例完全一致。

    参考代码

    #include <iostream>
    using namespace std;
    int main(){
        // P4529 站方阵:学生从1开始按行依次站成 n*n 方阵
        int n;
        cin >> n;
        int num = 1; // 从1号学生开始
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cout << num++; // 输出当前学生编号后自动加1
                if(j<n) cout << " "; // 两个数字之间用空格隔开
            }
            cout << endl; // 一行站完换行
        }
        return 0;
    }
    

    复杂度分析

    方阵有 n 行 n 列,一共 n² 个学生,每个学生输出一次,所以时间复杂度是 O(n²)。题目保证 3<n<10,最多 9×9=81 个学生,非常快。

    程序没有开数组,只用了 n 和 num 两个变量,空间复杂度是 O(1)。

    • 1