top1编程
← 返回题目
题解

【入门】数字走向III

1 条题解

  • 0
    @ 2026-7-31 2:18:48

    解题思路

    这道题要求我们输出一个 N×N 的方阵,数字按列优先的顺序填充。

    什么叫列优先呢?就是先填满第一列(从上到下),再填第二列,再填第三列……直到填满所有列。

    比如 N=5 时:

    • 第一列是 1, 2, 3, 4, 5
    • 第二列是 6, 7, 8, 9, 10
    • ……
    • 第五列是 21, 22, 23, 24, 25

    所以第 i 行第 j 列的数字 = 1 + i + j × N。

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main() {
        // n 表示方阵的大小,比如 n=5 就是 5行5列
        int n;
        cin >> n;
        // num 表示当前要填的数字,从 1 开始
        int num = 1;
        // 外层循环控制行数,i 从 0 到 n-1
        for (int i = 0; i < n; i++) {
            // 内层循环控制列数,j 从 0 到 n-1
            for (int j = 0; j < n; j++) {
                // 这个方阵是"列优先"填充的
                // 第 i 行第 j 列的数字 = 1 + i + j * n
                // 因为先填完一列再填下一列
                cout << setw(3) << num + i + j * n;
            }
            // 每行结束后换行
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²),因为要填满 N×N 个格子
    • 空间复杂度:O(1),只用了一个变量记录数字
    • 1