top1编程
← 返回题目
题解

逆序输出

1 条题解

  • 0
    @ 2026-8-5 1:04:44

    解题思路

    把 n 个数存进数组后:

    第一行要“逆序”输出能被 3 整除的数:从最后一个数开始往前扫描,凡是 a[i] % 3 == 0 就输出。

    第二行要“逆序”输出下标是 3 的倍数的数:还是从后往前扫描,只要下标 i % 3 == 0(注意下标从 0 开始)就输出。

    输出时用 first 变量记录是不是本行第一个数:第一个数前面不加空格,后面的数前面加一个空格,这样输出的数之间就正好用一个空格隔开,末尾也不会多出空格。

    参考代码

    // 逆序输出:第一行逆序输出能被3整除的数;第二行逆序输出下标为3的倍数的数(下标从0开始)
    #include <iostream>
    using namespace std;
    int a[1005];
    int main() {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) cin >> a[i];
        bool first = true;
        for (int i = n - 1; i >= 0; i--) {                // 从后往前找
            if (a[i] % 3 == 0) {                          // 能被3整除
                if (!first) cout << ' ';
                cout << a[i];
                first = false;
            }
        }
        cout << endl;
        first = true;
        for (int i = n - 1; i >= 0; i--) {                // 再逆序找下标为3的倍数
            if (i % 3 == 0) {
                if (!first) cout << ' ';
                cout << a[i];
                first = false;
            }
        }
        cout << endl;
        return 0;
    }
    

    复杂度分析

    每个数最多被扫描两遍,时间复杂度 O(n)。数组存 n 个数,空间复杂度 O(n)。

    • 1