top1编程
← 返回题目
题解

【入门】数字走向IV

1 条题解

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

    解题思路

    这道题和"数字走向III"很像,也是按列优先填充,但是显示的顺序反过来。

    原来"数字走向III"是从左到右显示列(第0列、第1列、第2列……), 这道题是从右到左显示列(第 N-1 列、第 N-2 列……第 0 列)。

    所以公式变成了:第 i 行第 j 列显示的数字 = 1 + i + (N-1-j) × N

    这里的 (N-1-j) 就是把列的顺序颠倒过来。

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main() {
        // n 表示方阵的大小,比如 n=5 就是 5行5列
        int n;
        cin >> n;
        // 外层循环控制行数,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 + (n-1-j) * n
                // (n-1-j) 让列的顺序反过来,右边那一列先显示
                cout << setw(3) << 1 + i + (n - 1 - j) * n;
            }
            // 每行结束后换行
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

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