题解
排排队
1 条题解
-
0
解题思路
学号是奇数的小朋友站第一排,学号是偶数的小朋友站第二排,并且每一排都要保持输入的顺序。
做法:准备两个数组 a 和 b,a 存奇数、b 存偶数。每读入一个学号,先判断它是奇数还是偶数,然后放进对应的数组。最后把 a 和 b 分别输出成两行。
注意一个小坑:学号可能是负数。在 C++ 里负数取模的结果和数学上不一样,比如 -5 % 2 的结果是 -1,而不是 1。所以判断奇数要用 x % 2 != 0,这样不管正数负数都能正确判断。
参考代码
// 排排队:学号是奇数的小朋友站一排,偶数的小朋友站一排,保持输入顺序 #include <iostream> using namespace std; int a[1005], b[1005]; // a存奇数,b存偶数 int main() { int n; cin >> n; int ca = 0, cb = 0; for (int i = 0; i < n; i++) { int x; cin >> x; if (x % 2 != 0) a[ca++] = x; // 奇数放第一排(负数也算奇数,x%2可能得-1,用!=0判断) else b[cb++] = x; // 偶数放第二排 } for (int i = 0; i < ca; i++) { if (i) cout << ' '; cout << a[i]; } cout << endl; for (int i = 0; i < cb; i++) { if (i) cout << ' '; cout << b[i]; } cout << endl; return 0; }复杂度分析
把 n 个学号读入并分组一遍,时间复杂度 O(n)。两个数组加起来存了 n 个数,空间复杂度 O(n)。
- 1