#cspjmn3. CSP-J 2026 初赛模拟卷 3

CSP-J 2026 初赛模拟卷 3

一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)

  1. 在计算机内部,传送、存储和加工处理数据或指令都是以( )形式进行的。 {{ select(1) }}
  • A. 二进制码
  • B. 八进制码
  • C. 十进制码
  • D. 智能拼音码
  1. 计算机的软件系统通常分为( )。 {{ select(2) }}
  • A. 硬件系统和软件系统
  • B. 高级软件和一般软件
  • C. 系统软件和应用软件
  • D. 军用软件和民用软件
  1. 关于五寸软盘读写孔,正确的说法是( )。 {{ select(3) }}
  • A. 从该孔读信息
  • B. 从该孔写信息
  • C. 当该孔处于封住状态时,不能删除盘中文件
  • D. 该孔没有作用
  1. 一棵二叉树的中序遍历序列为 DGBAECHF,后序遍历序列为 GDBEHFCA,则前序遍历序列为( )。 {{ select(4) }}
  • A. ABCDFGHE
  • B. ABDGCEFH
  • C. ACBGDHEF
  • D. ACEFHBGD
  1. 下列叙述中错误的是( )。 {{ select(5) }}
  • A. 微机应避免置于强磁场之中
  • B. 微机使用时间不宜过长,而应隔几小时关机一次
  • C. 微机应避免频繁开关,以延长其使用寿命
  • D. 微机不宜长期闲置不用
  1. 计算机网络最主要的优点是( )。 {{ select(6) }}
  • A. 运算速度快
  • B. 共享资源
  • C. 精度高
  • D. 存储容量大
  1. 下列 4 个不同进制表示的数中,最大的一个数是( )。 {{ select(7) }}
  • A. (220.1)10(220.1)_{10}
  • B. (1101.1011)2(1101.1011)_2
  • C. (334.1)8(334.1)_8
  • D. (DC.1)16(\text{DC}.1)_{16}
  1. 为了区分汉字与 ASCII 码,计算机中汉字编码的最高位为( )。 {{ select(8) }}
  • A. 1
  • B. 0
  • C. -1
  • D. 2
  1. 一般来说,在 TCP/IP 协议族中 IP 提供的服务属于( )。 {{ select(9) }}
  • A. 运输层服务
  • B. 会话层服务
  • C. 表示层服务
  • D. 网络层服务
  1. 通信时,模拟信号也可以用数字信道来传输,能实现模拟信号与数字信号之间转换功能的是( )。 {{ select(10) }}
  • A. D/A
  • B. A/D
  • C. Modem
  • D. Codec
  1. 一个栈的输入顺序为 1,2,3,4,51,2,3,4,5,下列序列中可能是栈的输出序列的是( )。 {{ select(11) }}
  • A. 54312
  • B. 24135
  • C. 21543
  • D. 12534
  1. 不属于 Internet 的功能的是( )。 {{ select(12) }}
  • A. 聊天
  • B. 远程教育
  • C. 查询资料
  • D. 传送能量
  1. 下列关于计算机病毒的特性的描述中,( )不是正确的。 {{ select(13) }}
  • A. 潜伏性
  • B. 传染性
  • C. 高速性
  • D. 危害性
  1. 下面不属于网络操作系统的是( )。 {{ select(14) }}
  • A. UNIX
  • B. Windows NT
  • C. NetWare
  • D. DOS
  1. 根据《计算机软件保护条例》,中国公民开发的软件享有著作权的情形是( )。 {{ select(15) }}
  • A. 不论何人、何地及是否发表的软件
  • B. 只有公开发表的软件
  • C. 只有单位发表的软件
  • D. 只有个人在国内公开发表的软件# 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 ✓,错误填 ✗;除特殊说明外,判断题每题 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 }

判断题

  1. (1 分)该算法中参数 int *a 采用的不是传值方式。 {{ select(16) }}
  • A. 正确
  • B. 错误
  1. (1 分)该算法输出最后会换行。 {{ select(17) }}
  • A. 正确
  • B. 错误
  1. 该算法中 mergesort 函数的时间复杂度为 O(nlogn)O(n\log n)。 {{ select(18) }}
  • A. 正确
  • B. 错误
  1. 如果输入为 5 4 3 9 7 8,则输出为 3,4,7,8,9。 {{ select(19) }}
  • A. 正确
  • B. 错误

选择题

  1. 下列选项中与 i==n ? '\n' : ',' 功能相同的是( )。 {{ select(20) }}
  • A. i!=1 ? '\n' : ','
  • B. "\n "[i==n]
  • C. "\n "[i!=n]
  • D. ' '
  1. 该算法在最坏情况下的时间复杂度与( )算法相同。 {{ select(21) }}
  • A. 快速排序
  • B. 选择排序
  • C. 计数排序
  • D. 堆排序

(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 }

判断题

  1. 该算法中 p1 的作用是确定操作类型。 {{ select(22) }}
  • A. 正确
  • B. 错误
  1. 去掉 for (i=1; i<=n; i++) f[i] = i; 对该算法没有影响。 {{ select(23) }}
  • A. 正确
  • B. 错误
  1. 如果输入为 2 2 1 1 2 2 1 2,则输出为 Y。 {{ select(24) }}
  • A. 正确
  • B. 错误
  1. 如果输入为 2 1 2 1 2,则输出为 N。 {{ select(25) }}
  • A. 正确
  • B. 错误

选择题

  1. 该算法的时间复杂度为( )。 {{ select(26) }}
  • A. O(mlogn)O(m\log n)
  • B. O(nm)O(nm)
  • C. O(n+m)O(n+m)
  • D. O(nm2)O(nm^2)
  1. return f[k] = find(f[k]); 改成 return find(f[k]);,则最坏情况下算法的时间复杂度为( )。 {{ select(27) }}
  • A. O(mlogn)O(m\log n)
  • B. O(nm)O(nm)
  • C. O(n+m)O(n+m)
  • D. O(nm2)O(nm^2)

(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
18 int main() {
19   int i,k,n;
20   cin >> n;
21   for (i=n; i>1; i--)
22     if (n % i == 0) x[t++]=i;
23   work(0, 0, n);
24   return 0;
25 }

判断题

  1. main() 函数里的 for 循环的作用是求出 nn 的所有因数。 {{ select(28) }}
  • A. 正确
  • B. 错误
  1. 该程序的作用是对 nn 进行素因数分解。 {{ select(29) }}
  • A. 正确
  • B. 错误
  1. 去掉 printf("%3d", a[k]); 中的 3 对程序没有影响。 {{ select(30) }}
  • A. 正确
  • B. 错误
  1. 去掉 if (n % x[k] == 0) 对程序有影响。 {{ select(31) }}
  • A. 正确
  • B. 错误

选择题

  1. 如果输入为 2,那么输出为( )。 {{ select(32) }}
  • A. 2
  • B. 2 1
  • C. 1 2
  • D. 2 2
  1. 如果输入为 72,那么输出的非回车字符有( )行。 {{ select(33) }}
  • A. 14
  • B. 15
  • C. 16
  • D. 17# 三、完善程序(单选题,每小题 3 分,共计 30 分)

(1)

(坐标统计)输入 nn 个整点在平面上的坐标。每个点可以控制所有位于它左下方的点(即 xxyy 坐标都比它小的点),它可以控制的点的数目称为"战斗力"。依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,则输出编号最大的那个)。

 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[i] = ①;
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 }
  1. ① 处应填( )。 {{ select(34) }}
  • A. 0
  • B. 1
  • C. i
  • D. INT_MAX
  1. ② 处应填( )。 {{ select(35) }}
  • A. y[j]<=y[i]
  • B. y[j]<y[i]
  • C. y[j]>y[i]
  • D. y[j]>=y[i]
  1. ③ 处应填( )。 {{ select(36) }}
  • A. ans = i
  • B. f[i]++
  • C. f[i]--
  • D. ans++
  1. ④ 处应填( )。 {{ select(37) }}
  • A. (f[i] > max_f)
  • B. (f[i] >= max_f)
  • C. (f[i] < max_f)
  • D. (f[i] <= max_f)
  1. ⑤ 处应填( )。 {{ select(38) }}
  • A. ans++
  • B. ans += max_f
  • C. ans = i
  • D. ans = max_f

(2)

(排列数)输入两个正整数 n,mn, m1<n<201<n<201m<n1\le m<n),在 1n1\sim n 中任取 mm 个数,按字典序从小到大输出所有这样的排列。

样例输入: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 }
  1. ① 处应填( )。 {{ select(39) }}
  • A. false
  • B. true
  • C. 1
  • D. -1
  1. ② 处应填( )。 {{ select(40) }}
  • A. used[i] = true
  • B. data[i] = i
  • C. used[data[i]] = true
  • D. used[data[i]] = false
  1. ③ 处应填( )。 {{ select(41) }}
  • A. j
  • B. i
  • C. true
  • D. false
  1. ④ 处应填( )。 {{ select(42) }}
  • A. n
  • B. m
  • C. i
  • D. j
  1. ⑤ 处应填( )。 {{ select(43) }}
  • A. return 0
  • B. exit
  • C. continue
  • D. break