top1编程
← 返回题目
题解

排排队

1 条题解

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

    解题思路

    学号是奇数的小朋友站第一排,学号是偶数的小朋友站第二排,并且每一排都要保持输入的顺序。

    做法:准备两个数组 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