题解
逆序输出
1 条题解
-
0
解题思路
把 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