#CSP0012. CSP-J 2026 初赛模拟试卷 六
CSP-J 2026 初赛模拟试卷 六
- 在计算机系统中,操作系统的主要作用是()。 {{ select(1) }}
- 将用高级语言编写的程序翻译成机器语言
- 管理和控制计算机的硬件与软件资源
- 进行科学计算
- 防范计算机病毒
- 在NOI Linux中,使用
g++编译一个名为main.cpp的源文件,并指定生成的可执行文件名为main,正确的命令是()。 {{ select(2) }}
g++ -o main main.cppg++ main.cpp -o maing++ main.cpp maing++ 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}
- 对于变量 ,,表达式 的结果是()。 {{ select(4) }}
- 25
- 30
- 0
- 7
- 下列几种排序算法中,在最坏情况下,()的时间复杂度与其他三种不同。 {{ select(5) }}
- 冒泡排序
- 选择排序
- 插入排序
- 归并排序
- 十六进制数
0xDEAD与二进制数11011110110101101的关系是()。 {{ 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
- 以下代码段的时间复杂度是()。
for (int i = n; i >= 1; i /= 2)
for (int j = 1; j <= i; j++)
sum++;
{{ select(11) }}
- 对长度为 的有序数组进行二分查找,( )不是必须满足的条件。 {{ select(12) }}
- 数组元素必须连续存储
- 数组必须按关键字有序
- 必须能够随机访问元素
- 数据量 最好较大
- 一棵二叉树的前序遍历序列是
ABDECF,中序遍历序列是DBEAFC,则其后序遍历序列是()。 {{ select(13) }}
- DEBFCA
- DEBFAC
- DBEFCA
- DBECFA
- 循环队列容量为10,
front = 7,rear = 3,元素个数为()。 {{ select(14) }}
- 4
- 5
- 6
- 7
- 使用邻接表存储图,拓扑排序的时间复杂度是()。 {{ select(15) }}
阅读程序(1):
#include <iostream>
#include <vector>
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) }}
- 正确
- 错误
- 当 时,程序会输出
perfect_number。 {{ select(18) }}
- 正确
- 错误
- n 的取值区间为 [10,100] 时,第一个输出
abundant_number的 n 是()。 {{ select(19) }}
- 10
- 12
- 28
- 72
- n 的取值区间为 [1,1000] 时,关于完全数(perfect_number),以下说法中正确的是()。 {{ select(20) }}
- 所有完全数都是奇数
- 所有完全数都是偶数
- 完全数可以是素数
- 完全数的个数是无限的
阅读程序(2):
#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) }}
- 正确
- 错误
- 本题输入
nums数组的数据可以是无序的。 {{ select(22) }}
- 正确
- 错误
- 程序功能是判断 n 个数是不是连续的,如果不是连续的,则输出其中缺失的数。 {{ select(23) }}
- 正确
- 错误
- (4分)若输入
7 7 1 6 2 5 3 0,则输出结果是()。 {{ select(24) }}
- 0
- 3
- 4
- 8
- (4分)算法利用的最主要的性质是()。 {{ select(25) }}
- 异或的交换律和结合律
- 异或的交换律和分配律
- 异或的结合律和分配律
- 异或的交换律和幂零性
阅读程序(3):
#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>());
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;
}
- 该程序使用二分查找,找到第一个大于或等于 的元素的下标和数值。 {{ 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 78 78 99999998 99999999
- (4分)对于输入的 n 个数的序列,下列说法中正确的是()。 {{ select(30) }}
- 序列中的元素可以从大到小有序
- 序列中的元素可以从小到大有序
- 序列中的元素可以无序
- 以上说法都正确
完善程序(1):
#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):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1009;
const ll INF = 1e9;
vector<int> 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]d[i] > d[u]!ok[i] && d[i] < d[u]ok[i] && d[i] < d[u]
- ④处应填()。 {{ 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]