#12249. 珅泽教育CSP-J第一轮模拟考第二十四套 第 21 题

珅泽教育CSP-J第一轮模拟考第二十四套 第 21 题

二、阅读程序(判断题正确填 A、错误填 B;除特殊说明外,判断题 2 分,选择题 3 分,共计 40 分)

程序一:两种排序输出

#include <iostream>
using namespace std;

const int MAXN = 1000050;
int n, a[MAXN], a1[MAXN], b[MAXN], lim;

void solve1() {
    for (int i = 1; i <= n; i++)
        b[a[i]]++; // ①
    for (int i = 1; i <= lim; i++) {
        if (b[i]) // ②
            cout << i << " ";
    }
    cout << endl;
}

void solve2() {
    int cnt = 0, flag;
    for (int i = 1; i <= n; i++) {
        flag = false;
        for (int j = 1; j <= n - 1; j++) {
            if (a[j] > a[j + 1]) {
                swap(a[j], a[j + 1]);
                cnt++;
                flag = true;
            }
        }
        //if (flag == false)
        //    break;
    }
    for (int i = 1; i <= n; i++)
        cout << a[i] << " ";
    cout << endl;
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        a1[i] = a[i]; // ③
        lim = max(a[i], lim); // ④
    }
    solve1();
    for (int i = 1; i <= n; i++)
        a[i] = a1[i];
    solve2();
    return 0;
}

已知 1n1061\le n\le10^61ai1061\le a_i\le10^6

  1. 若要使 solve1solve2 的输出结果相同,应修改程序中的哪一处?

{{ select(1) }}