#179. CSP-J 2026 初赛模拟卷 6

0

CSP-J 2026 初赛模拟卷 6

CSP-J 2026 初赛模拟卷 6 一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项) 在计算机系统中,操作系统的主要作用是( )。 {{ select(1) }}

将用高级语言编写的程序翻译成机器语言

管理和控制计算机的硬件与软件资源

进行科学计算

防范计算机病毒

在NOI Linux中,使用 g++ 编译一个名为main.cpp的源文件,并指定生成的可执行文件名为main,正确的命令是( )。 {{ select(2) }}

g++ -o main main.cpp

g++ main.cpp -o main

g++ main.cpp main

g++ main -o main.cpp

对序列{5,2,4,6,1,3}进行直接插入排序,在完成前3个元素(5,2,4)的排序后,序列的状态是( )。 {{ select(3) }}

{2,4,5,6,1,3}

{2,5,4,6,1,3}

{4,2,5,6,1,3}

{5,2,4,6,1,3}

对于变量 x

25 x=25, y

7 y=7,表达式 ( x y ) &

( x & y ) (x y )& (x&y) 的结果是( )。 {{ select(4) }}

25

30

0

7

下列几种排序算法中,在最坏情况下,( )的时间复杂度与其他三种不同。 {{ select(5) }}

冒泡排序

选择排序

插入排序

归并排序

十六进制数0xDEAD与二进制数1101111010101101的关系是( )。 {{ select(6) }}

前者比后者大1

后者比前者大1

两者相等

前者是后者的两倍

对几乎已经排好序的数据(只有少数元素位置不对)进行排序,( )算法最快。 {{ select(7) }}

快速排序

插入排序

归并排序

选择排序

一个项目团队中,每个成员都与其他恰好3个成员有直接协作关系。如果团队有12人,那么协作关系总共有( )种。 {{ select(8) }}

18

36

12

4

一个栈的入栈序列为1,2,3,4,5。出栈序列中,4是第一个出栈的元素。出栈序列( )是不可能的。 {{ select(9) }}

4,5,3,2,1

4,3,5,2,1

4,2,3,5,1

4,1,2,3,5

从1,2,3,...,10中选出4个不同的数,使得其中任意两个数的差都不小于2,不同的选法有( )种。 {{ select(10) }}

35

70

84

120

以下代码段的时间复杂度是( )。

cpp for(int i = n; i > 0; i /= 2) { for(int j = 0; j < i; j++) { // ... } } {{ select(11) }}

O ( n ) O(n)

O ( n log ⁡ n ) O(nlogn)

O ( n 2 ) O(n 2 )

O ( log ⁡ n ) O(logn)

对长度为 n n 的有序数组进行二分查找,( )不是必须满足的条件。 {{ select(12) }}

数组元素必须连续存储

数组必须按关键字有序

必须能够随机访问元素

数据量 n n 最好较大

一棵二叉树的前序遍历序列是ABDECF,中序遍历序列是DBEAFC,则其后序遍历序列是( )。 {{ select(13) }}

DEBFCA

DEBFAC

DBEFCA

DBECFA

循环队列容量为10,front = 7,rear = 3,元素个数为( )。 {{ select(14) }}

4

5

6

7

使用邻接表存储图,拓扑排序的时间复杂度是( )。 {{ select(15) }}

O ( V ) O(V)

O ( E ) O(E)

O ( V + E ) O(V+E)

O ( V 2 ) O(V 2 )

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 ✓ ✓,错误填 × ×;除特殊说明外,判断题每题2分,选择题每题3分,共计40分) (1) cpplline-numbers #include #include using namespace std;

int solve(int n) { int sum = 0; for (int i = 1; i <= n / 2; i++) if (n % i == 0) sum += i; return sum; }

int main() { int n; cin >> n; int sum = solve(n); if (sum == n) { cout << "perfect_number" << endl; } else if (sum > n) { cout << "abundant_number" << endl; } else { cout << "deficient_number" << endl; } return 0; } 判断题 函数solve计算的是n的所有因数之和。 {{ select(16) }}

正确

错误

如果n是素数,那么solve的返回值总是1。 {{ select(17) }}

正确

错误

当 n

496 n=496 时,程序会输出“perfect_number”。 {{ select(18) }}

正确

错误

选择题 n的取值区间为[10,100]时,第一个输出“abundant_number”的n是( )。 {{ select(19) }}

10

12

28

72

n的取值区间为[1,1000]时,关于完全数(perfect_number),以下说法中正确的是( )。 {{ select(20) }}

所有完全数都是奇数

所有完全数都是偶数

完全数可以是素数

完全数的个数是无限的

(2) cpplline-numbers #include <bits/stdc++.h> using namespace std; const int N=10009; int n, nums[N];

int solve() { int res = n; for (int i = 0; i < n; i++) { res ^= i; res ^= nums[i]; } return res; }

int main() { cin >> n; // 保证输入的n个数在0..n范围内,且互不相同 for (int i = 0; i < n; i++) cin >> nums[i]; cout << solve() << endl; return 0; } 判断题 若输入5 1 2 3 4 5,则输出结果是0。 {{ select(21) }}

正确

错误

本题输入num数组的数据可以是无序的。 {{ select(22) }}

正确

错误

程序功能是判断n个数是不是连续的,如果不是连续的,则输出其中缺失的数。 {{ select(23) }}

正确

错误

选择题 (4分)若输入7 7 1 6 2 5 3 0,则输出结果是( )。 {{ select(24) }}

0

3

4

8

(4分)算法利用的最主要的性质是( )。 {{ select(25) }}

异或的交换律和结合律

异或的交换律和分配律

异或的结合律和分配律

异或的交换律和幂零性

(3) cpplline-numbers #include <bits/stdc++.h> using namespace std; const int N = 100009; const int INF = 1e8 - 1; int a[N];

int main() { int n,x; cin >> n >> x; for (int i = 0; i < n; i++) cin >> a[i]; sort(a,a+n,less());

int left = 0, right = n - 1, p = n;
while (left <= right) {
    int mid = (left + right) / 2;
    if (a[mid] > x) {
        p = mid;
        right = mid - 1;
    } else {
        left = mid + 1;
    }
}
cout << p << " ";
if (p < n) cout << a[p] << endl;
else cout << INF << endl;
return 0;

} 判断题 该程序使用二分查找,找到第一个大于或等于 x x 的元素的下标和数值。 {{ select(26) }}

正确

错误

当输入7 8 0 9 2 7 8 7 6时,程序输出为“7 9”。 {{ select(27) }}

正确

错误

数组排序后,也可以使用upper_bound(a,a+n,x)-a得到p的数值。 {{ select(28) }}

正确

错误

选择题 (4分)当输入8 7 3 4 4 5 5 6 6 7时,程序输出为( )。 {{ select(29) }}

7 7

8 7

8 9999999

7 9999999

(4分)对于输入的n个数的序列,下列说法中正确的是( )。 {{ select(30) }}

序列中的元素可以从大到小有序

序列中的元素可以从小到大有序

序列中的元素可以无序

以上说法都正确

三、完善程序(单选题,每小题3分,共计30分) (1) 汉诺塔问题 cpplline-numbers #include <bits/stdc++.h> using namespace std; typedef long long ll;

ll steps = 0;

void hanoi(int n, char A, char B, char C) { if (n == 1) { cout << A << "->" << C << endl; ① } else { hanoi(n - 1, A, C, B); ② steps++; ③ } }

int main() { int n; cin >> n; if (n <= 0) { cout << 0 << endl; ④ } ⑤ cout << steps << endl; return 0; } ①处应填( ) {{ select(31) }}

return;

steps = 1;

steps++;

steps = n

②处应填( ) {{ select(32) }}

cout << A << "->" << B << endl;

cout << A << "->" << C << endl;

cout << B << "->" << C << endl;

cout << C << "->" << B << endl;

③处应填( ) {{ select(33) }}

hanoi(n - 1, A, B, C);

hanoi(n - 1, A, C, B);

hanoi(n - 1, B, A, C);

hanoi(n - 1, B, C, A);

④处应填( ) {{ select(34) }}

break;

continue;

n = 0;

return 0;

⑤处应填( ) {{ select(35) }}

hanoi(1, 'A', 'B', 'C');

hanoi(n, 'A', 'B', 'C');

hanoi(1, 'A', 'C', 'B');

hanoi(n, 'A', 'C', 'B');

(2) Prim算法 cpplline-numbers #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1009; const ll INF = 1e9; vector to[N], w[N]; int n, m; ll d[N]; // d[i]=i号顶点到当前MST的最小边权 bool ok[N]; // ok[i]=i号顶点是否在当前MST中 void add(int u, int v, int k) { to[u].push_back(v); to[v].push_back(u); w[u].push_back(k); w[v].push_back(k); }

ll Prim() { ① ll ans = 0; d[1] = 0;

for (int k = 1; k <= n; k++){
    int u = ②;
    for (int i = 1; i <= n; i++)
        if (③) u = i;
    ok[u] = 1;
    ans += ④;

    for (int i = 0; i < to[u].size(); i++){
        int v = to[u][i], cost = w[u][i];
        if (⑤) d[v] = cost;
    }
}
return ans;

}

int main() { cin >> n >> m; int u, v, k; for (int i = 1; i <= m; i++){ cin >> u >> v >> k; add(u, v, k); } cout << Prim() << endl; return 0; } ①处应填( ) {{ select(36) }}

fill(d, d+n+1, -1);

fill(d, d+n+1, INF);

fill(d, d+n+2, -1);

fill(d, d+n+2, INF);

②处应填( ) {{ select(37) }}

-1

0

n

n+1

③处应填( ) {{ select(38) }}

d[i] < d[u] && !ok[i]

d[i] < d[u] && ok[i]

d[i] > d[u] && !ok[i]

d[i] > d[u] && ok[i]

④处应填( ) {{ select(39) }}

u

d[u]

k

d[k]

⑤处应填( ) {{ select(40) }}

!ok[v] && cost < d[v]

!ok[v] && cost > d[v]

ok[v] && cost < d[v]

ok[v] && cost > d[v]