top1编程
← 返回题目
题解

【入门】数字走向V

1 条题解

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

    解题思路

    这道题要求输出一个 N 行 N 列的方阵,数字从 N×N 开始,依次减 1,一直减到 1。

    举个例子,如果输入 5,那就要输出 5 行 5 列:

    • 第 1 行:25 24 23 22 21
    • 第 2 行:20 19 18 17 16
    • ……
    • 第 5 行:5 4 3 2 1

    我们可以用两层循环来解决:

    1. 外层循环控制行数,循环 N 次,每次输出一行
    2. 内层循环控制列数,循环 N 次,每次输出一个数字

    每输出一个数字,就把这个数字减 1,准备输出下一个更小的数字。

    注意每个数字要用 setw(3) 设置宽度为 3,这样个位和十位数在视觉上能对齐。

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        // 题目要求:输出 N 行 N 列的方阵
        // 数字从 N*N 开始,依次减 1,一直减到 1
        // 比如 N=5,第一行就是 25 24 23 22 21
        int num = n * n;
    
        // 外层循环控制行数,一共输出 n 行
        for (int i = 0; i < n; i++) {
            // 内层循环控制列数,每行输出 n 个数字
            for (int j = 0; j < n; j++) {
                // setw(3) 让每个数字占 3 个字符宽度,右对齐
                cout << setw(3) << num;
                num--;
            }
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²),因为两层循环各执行 N 次,总共输出 N² 个数字
    • 空间复杂度:O(1),只用了几个变量,没有使用额外的数组
    • 1