#J0013. CSP-J 2026 初赛模拟卷 3
CSP-J 2026 初赛模拟卷 3
信息学奥赛 CSP-J 2026 初赛模拟卷 3
一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)
- 在计算机内部,传送、存储和加工处理数据或指令都是以( )形式进行的。 {{ select(1) }}
- 二进制码
- 八进制码
- 十进制码
- 智能拼音码
- 计算机的软件系统通常分为( )。 {{ select(2) }}
- 硬件系统和软件系统
- 高级软件和一般软件
- 系统软件和应用软件
- 军用软件和民用软件
- 关于五寸软盘读写孔,正确的说法是( )。 {{ select(3) }}
- 从该孔读信息
- 从该孔写信息
- 当该孔处于封住状态时,不能删除盘中文件
- 该孔没有作用
- 一棵二叉树的中序遍历序列为 ,后序遍历序列为 ,则前序遍历序列为( )。 {{ select(4) }}
- 下列叙述中错误的是( )。 {{ select(5) }}
- 微机应避免置于强磁场之中
- 微机使用时间不宜过长,而应隔几小时关机一次
- 微机应避免频繁开关,以延长其使用寿命
- 微机不宜长期闲置不用
- 计算机网络最主要的优点是( )。 {{ select(6) }}
- 运算速度快
- 共享资源
- 精度高
- 存储容量大
- 下列 个不同进制表示的数中,最大的一个数是( )。 {{ select(7) }}
- 为了区分汉字与 码,计算机中汉字编码的最高位为( )。 {{ select(8) }}
- 一般来说,在 协议族中 提供的服务属于( )。 {{ select(9) }}
- 运输层服务
- 会话层服务
- 表示层服务
- 网络层服务
- 通信时,模拟信号也可以用数字信道来传输,能实现模拟信号与数字信号之间转换功能的是( )。 {{ select(10) }}
- 一个栈的输入顺序为 ,下列序列中可能是栈的输出序列的是( )。 {{ select(11) }}
- 不属于 的功能的是( )。 {{ select(12) }}
- 聊天
- 远程教育
- 查询资料
- 传送能量
- 下列关于计算机病毒的特性的描述中,( )不是正确的。 {{ select(13) }}
- 潜伏性
- 传染性
- 高速性
- 危害性
- 下面不属于网络操作系统的是( )。 {{ select(14) }}
- 根据《计算机软件保护条例》,中国公民开发的软件享有著作权的情形是( )。 {{ select(15) }}
- 不论何人、何地及是否发表的软件
- 只有公开发表的软件
- 只有单位发表的软件
- 只有个人在国内公开发表的软件
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 ✓,错误填 ✗;除特殊说明外,判断题每题 2 分,选择题每题 3 分,共计 40 分)
(1)
1 #include <bits/stdc++.h>
2 using namespace std;
3 const int Maxn = 10005;
4 int n,b[Maxn];
5 void mergesort(int *a, int l, int r) {
6 if (l == r) return;
7 int mid = l+r>>1;
8 mergesort(a,l,mid), mergesort(a, mid + 1, r);
9 int i=l, j=mid+1, cnt=0;
10 while (i <= mid && j <= r) {
11 if (a[i] <= a[j]) b[++cnt] = a[i++];
12 else b[++cnt] = a[j++];
13 }
14 while (i <= mid) b[++cnt] = a[i++];
15 while (j <= r) b[++cnt] =a[j++];
16 for (i=l; i<=r; i++) a[i] = b[i-l+1];
17 }
18
19 int a[Maxn];
20 int main(void) {
21 cin >> n;
22 for (int i=1; i<=n; i++) cin >> a[i];
23 mergesort(a, 1, n);
24 for (int i=1; i<=n; i++) cout << a[i] << (i==n ? '\n':' ');
25 return 0;
26 }
判断题
- ( 分)该算法中参数
int *a采用的不是传值方式。 ( ) {{ select(16) }}
- √
- ×
- ( 分)该算法输出最后会换行。 ( ) {{ select(17) }}
- √
- ×
- 该算法中
mergesort函数的时间复杂度为 。 ( ) {{ select(18) }}
- √
- ×
- 如果输入为
5 4 3 9 7 8,则输出为3 4 7 8 9。 ( ) {{ select(19) }}
- √
- ×
选择题
- 下列选项中与
i==n ? '\n' : ' '功能相同的是( )。 {{ select(20) }}
i!=1 ? '\n' : ' '"\n "[i==n]"\n "[i!=n]' '
- 该算法在最坏情况下的时间复杂度与( )算法相同。 {{ select(21) }}
- 快速排序
- 选择排序
- 计数排序
- 堆排序
(2)
1 #include <bits/stdc++.h>
2 using namespace std;
3 int i,j,k,n,m, f[10010], p1, p2, p3;
4 int find(int k) {
5 if (f[k] == k) return k;
6 return f[k] = find(f[k]);
7 }
8 int main() {
9 cin >> n >> m; // 假设 n, m 同量级
10 for (i=1; i<=n; i++) f[i] = i;
11 for (i=1; i<=m; i++) {
12 cin >> p1 >> p2 >> p3;
13 if (p1 == 1)
14 f[find(p2)] = find(p3);
15 if (p1 == 2) {
16 if (find(p2) == find(p3))
17 printf("Y\n");
18 else
19 printf("N\n");
20 }
21 }
22 return 0;
23 }
判断题
- 该算法中
p1的作用是确定操作类型。 ( ) {{ select(22) }}
- √
- ×
- 去掉
for (i=1; i<=n; i++) f[i] = i;对该算法没有影响。 ( ) {{ select(23) }}
- √
- ×
- 如果输入为
2 2 1 1 2 2 1 2,则输出为Y。 ( ) {{ select(24) }}
- √
- ×
- 如果输入为
2 1 2 1 2,则输出为N。 ( ) {{ select(25) }}
- √
- ×
选择题
- 该算法的时间复杂度为( )。 {{ select(26) }}
- 把
return f[k] = find(f[k]);改成return find(f[k]);,则最坏情况下算法的时间复杂度为( )。 {{ select(27) }}
(3)
1 #include <bits/stdc++.h>
2 using namespace std;
3 int t,x[100],a[100];
4 void work(int d,int i,int n) {
5 int k;
6 if (n == 1) {
7 for (k=0; k<d; k++)
8 printf("%3d", a[k]);
9 printf("\n");
10 } else for (k=i; k<t; k++)
11 if (n % x[k] == 0) {
12 a[d] = x[k];
13 work(d+1, k, n/x[k]);
14 }
15 }
16
17 int main() {
18 int i,k,n;
19 cin >> n;
20 for (i=n; i>1; i--)
21 if (n % i == 0) x[t++]=i;
22 work(0, 0, n);
23 return 0;
24 }
判断题
main()函数里的for循环的作用是求出 的所有因数。 ( ) {{ select(28) }}
- √
- ×
- 该程序的作用是对 进行素因数分解。 ( ) {{ select(29) }}
- √
- ×
- 去掉
printf("%3d", a[k]);中的 对程序没有影响。 ( ) {{ select(30) }}
- √
- ×
- 去掉
if (n % x[k] == 0)对程序有影响。 ( ) {{ select(31) }}
- √
- ×
选择题
- 如果输入为
2,那么输出为( )。 {{ select(32) }}
22 11 22 2
- 如果输入为
72,那么输出的非回车字符有( )行。 {{ select(33) }}
三、完善程序(单选题,每小题 3 分,共计 30 分)
(1)
(坐标统计)输入 个整点在平面上的坐标。每个点可以控制所有位于它左下方的点(即 、 坐标都比它小的点),它可以控制的点的数目称为"战斗力"。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,则输出编号最大的那个)。
1 #include <iostream>
2 using namespace std;
3 const int SIZE = 100;
4 int x[SIZE], y[SIZE], f[SIZE];
5 int n,i,j,max_f,ans;
6 int main() {
7 cin >> n;
8 for (i=1; i<=n; i++) cin >> x[i] >> y[i];
9 max_f = 0;
10 for (i=1; i<=n; i++) {
11 f = ① ;
12 for (j=1; j<=n; j++) {
13 if (x[j] < x[i] && ② )
14 ③ ;
15 }
16 if ④ {
17 max_f = f[i];
18 ⑤ ;
19 }
20 }
21 for (int i=1; i<=n; i++) cout << f[i] << endl;
22 cout << ans << endl;
23 return 0;
24 }
- ① 处应填( )。 {{ select(34) }}
01iINT_MAX
- ② 处应填( )。 {{ select(35) }}
y[j]<=y[i]y[j]<y[i]y[j]>y[i]y[j]>=y[i]
- ③ 处应填( )。 {{ select(36) }}
ans = if[i]++f[i]--ans++
- ④ 处应填( )。 {{ select(37) }}
(f[i] > max_f)(f[i] >= max_f)(f[i] < max_f)(f[i] <= max_f)
- ⑤ 处应填( )。 {{ select(38) }}
ans++ans += max_fans = ians = max_f
(2)
(排列数)输入两个正整数 (,),在 中任取 个数,按字典序从小到大输出所有这样的排列。
样例输入:3 2
样例输出:
1 2
1 3
2 1
2 3
3 1
3 2
1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4 const int SIZE=25;
5 bool used[SIZE];
6 int data[SIZE];
7 int n,m,i,j,k;
8 bool flag;
9
10 int main() {
11 cin >> n >> m;
12 memset(used, false,sizeof(used));
13 for (i=1; i<=m; i++) {
14 data[i] = i;
15 used[i] = true;
16 }
17 flag = true;
18 while (flag) {
19 for (i=1; i<=m-1; i++)
20 cout << data[i] <<" ";
21 cout << data[m] << endl;
22 flag = ① ;
23 for (i=m; i>=1; i--) {
24 ② ;
25 for (j=data[i]+1;j<=n;j++)
26 if (!used[j]) {
27 used[j] = true;
28 data[i] = ③ ;
29 flag = true;
30 break;
31 }
32 if (flag) {
33 for (k=i+1; k<=m;k++)
34 for (j=1; j<= ④ ; j++)
35 if (!used[j]) {
36 data[k] = j;
37 used[j] = true;
38 break;
39 }
40 ⑤ ;
41 }
42 }
43 }
44 return 0;
45 }
- ① 处应填( )。 {{ select(39) }}
falsetrue1-1
- ② 处应填( )。 {{ select(40) }}
used[i] = truedata[i] = iused[data[i]] = trueused[data[i]] = false
- ③ 处应填( )。 {{ select(41) }}
jitruefalse
- ④ 处应填( )。 {{ select(42) }}
nmij
- ⑤ 处应填( )。 {{ select(43) }}
return 0exitcontinuebreak