top1编程
← 返回题目
题解

【入门】数字走向VI

1 条题解

  • 0
    @ 2026-7-31 4:27:10

    解题思路

    这道题要求输出一个 N 行 N 列的方阵。和之前的题目不同,这一题的每一行都是从大到小倒着输出的。

    举个例子,如果输入 5:

    • 第 1 行:5 4 3 2 1
    • 第 2 行:10 9 8 7 6
    • 第 3 行:15 14 13 12 11
    • 第 4 行:20 19 18 17 16
    • 第 5 行:25 24 23 22 21

    观察规律:第 i 行从 i×N 开始,每次减 1,一直减到 (i-1)×N+1。

    所以我们可以用两层循环:

    1. 外层循环控制行数,i 从 0 到 N-1
    2. 内层循环控制列数,每行从 (i+1)×N 开始递减

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        // 外层循环控制行数,一共输出 n 行
        for (int i = 0; i < n; i++) {
            // 每行从 (i+1)*n 开始,依次减 1
            // 比如 n=5,第一行从 5 开始:5 4 3 2 1
            // 第二行从 10 开始:10 9 8 7 6
            int num = (i + 1) * n;
            for (int j = 0; j < n; j++) {
                cout << setw(3) << num;
                num--;
            }
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²),两层循环各执行 N 次
    • 空间复杂度:O(1),只用了几个变量
    • 1