#cspjmn8. CSP-J 2026 初赛模拟卷 8

CSP-J 2026 初赛模拟卷 8

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

  1. CCF 的中文全称是( )。 {{ select(1) }}
  • A. 中国计算机协会
  • B. 中国计算机行业
  • C. 中国计算机学会
  • D. 中国计算机公会
  1. 汉字输入方法实质上是对汉字进行编码,下面不是汉字输入方法的编码方式的是( )。 {{ select(2) }}
  • A. 音码
  • B. 形码
  • C. 音形码
  • D. ASCII 码
  1. 表达式 a(b+c)da * (b + c) * d 的后缀形式是( )。 {{ select(3) }}
  • A. a b c d   a\ b\ c\ d\ *\ *\ *
  • B. a b c +  d a\ b\ c\ +\ *\ d\ *
  • C. a  b c +  da\ *\ b\ c\ +\ *\ d
  • D. b + c  a  db\ +\ c\ *\ a\ *\ d
  1. 在以下各项中,不是操作系统的是( )。 {{ select(4) }}
  • A. Sybase
  • B. Linux
  • C. Solaris
  • D. Symbian
  1. 二进制数 00101100 和 00010101 的和是( )。 {{ select(5) }}
  • A. 00101000
  • B. 01000001
  • C. 01000100
  • D. 00111000
  1. 微型计算机在工作中电源突然中断,再次通电后数据不能恢复的是( )。 {{ select(6) }}
  • A. ROM 和 RAM 中的信息
  • B. ROM 中的信息
  • C. RAM 中的信息
  • D. 硬盘中的信息
  1. 从一个 4×44\times 4 的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格(不计顺序),有( )种方法。 {{ select(7) }}
  • A. 72
  • B. 144
  • C. 256
  • D. 128
  1. 关于汇编语言,下列说法中错误的是( )。 {{ select(8) }}
  • A. 是一种与具体硬件相关的程序设计语言
  • B. 在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试
  • C. 可以直接访问寄存器、内存单元,以及 I/O 端口
  • D. 随着高级语言的诞生,如今已完全被淘汰,不再使用
  1. 同时掷出 3 枚完全相同的六面骰子,每枚骰子上有 1 到 6 的数字。将得到的点数排序后,有( )种不同的结果。 {{ select(9) }}
  • A. 208
  • B. 56
  • C. 216
  • D. 120
  1. 某个 MV 是一段时长 4 分钟的视频文件。它每秒播放 10 帧图像,每帧图像是一幅分辨率为 2048 像素 ×\times 1152 像素(长宽比为 16:9)的 32 位真彩色图像,其画面没有被压缩。这个视频没有音频。这个视频文件大约需要占用( )的存储空间。 {{ select(10) }}
  • A. 21GB
  • B. 27GB
  • C. 168GB
  • D. 2GB
  1. 一个有符号单字节能表达的最小二进制数是( )。 {{ select(11) }}
  • A. 10000000
  • B. 11111111
  • C. 01111111
  • D. 00000000
  1. 前序遍历序列与后序遍历序列相同的二叉树为( )。 {{ select(12) }}
  • A. 非叶节点只有左子树的二叉树
  • B. 只有根节点的二叉树
  • C. 根节点无右子树的二叉树
  • D. 非叶节点只有右子树的二叉树
  1. 下面有关数制的式子中,正确的是( )。 {{ select(13) }}
  • A. (A2B.C5)16=(101000101011.01011100)2(\text{A2B.C5})_{16} = (101000101011.01011100)_2
  • B. (2)8×(6)8=(14)8(2)_8 \times (6)_8 = (14)_8
  • C. (110010)2+(16)10=(1000100)2(110010)_2 + (16)_{10} = (1000100)_2
  • D. (1000)2=(8)8(1000)_2 = (8)_8
  1. 若对于所有规模为 nn 的输入,一个算法均恰好进行( )次运算,则可以说该算法的时间复杂度为 O(2n)O(2^n)。 {{ select(14) }}
  • A. 2n+12^{n+1}
  • B. 3n3^n
  • C. n×2nn \times 2^n
  • D. 22n2^{2n}
  1. f0=0f_0 = 0f1=1f_1 = 1fn+1=(fn+fn1)/2f_{n+1} = (f_n + f_{n-1})/2,则随着 ii 的增大,fif_i 将接近于( )。 {{ select(15) }}
  • A. 1/21/2
  • B. 2/32/3
  • C. (51)/2(\sqrt{5}-1)/2
  • D. 1

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

(1)

 1 #include <iostream>
 2 using namespace std;
 3 int rSum(int j) {
 4   int sum=0;
 5   while (j != 0) {
 6     sum = sum * 10 + (j % 10);
 7     j = j / 10;
 8   }
 9   return sum;
10 }
11
12 int main() {
13   int n,m;
14   cin >> n >> m; // 保证输入为正整数,但不大于 10^8
15   for (int i=n; i<=m; i++)
16     if (i == rSum(i)) cout << i << ' ';
17   return 0;
18 }

判断题

  1. (1 分)主函数中的 for 循环总共执行 m-n 次。 {{ select(16) }}
  • A. 正确
  • B. 错误
  1. rSum 这个函数的返回值 sum 一定不会大于 j。 {{ select(17) }}
  • A. 正确
  • B. 错误
  1. 假设 n=1,m 足够大,则输出个数的量级逐渐趋近于 O(m0.5)O(m^{0.5})。 {{ select(18) }}
  • A. 正确
  • B. 错误
  1. 输入任意 2 个取值范围为 [1,100] 的整数,输出个数都不超过 100。 {{ select(19) }}
  • A. 正确
  • B. 错误

选择题

  1. 若输入 190 230,总共会输出( )个数。 {{ select(20) }}
  • A. 1
  • B. 2
  • C. 3
  • D. 4
  1. 假设 n 和 m 是相同量级(m=O(n)m = O(n)),则该算法的时间复杂度为( )。 {{ select(21) }}
  • A. O(n)O(n)
  • B. O(nlogn)O(n\log n)
  • C. O(n1.5)O(n^{1.5})
  • D. O(n2)O(n^2)

(2)

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 int main() {
 5   string s;
 6   char m1,m2;
 7   getline(cin,s);
 8   m1 = ' ';
 9   m2 = ' ';
10   for (int i=0; i<s.length(); i++) {
11     if (s[i] > m1) {
12       m2 = m1;
13       m1 = s[i];
14     } else if (s[i] > m2)
15       m2 = s[i];
16   }
17   cout << int(m1) << ' ' << int(m2) << endl;
18   return 0;
19 }

判断题

  1. (1 分)getline() 会将一整行连空格一起输入到字符串中。 {{ select(22) }}
  • A. 正确
  • B. 错误
  1. 输出的两个整数不可能相同。 {{ select(23) }}
  • A. 正确
  • B. 错误
  1. 去掉 else 这几个字符,则可能出现 m2 > m1 的情况。 {{ select(24) }}
  • A. 正确
  • B. 错误
  1. 若输入长度为 10 且仅含小写字母的随机字符串,则输出结果中 m2 的值越大,其出现的可能性越小。 {{ select(25) }}
  • A. 正确
  • B. 错误

选择题

  1. 维护 m1 和 m2 的过程最接近( )。 {{ select(26) }}
  • A. 选择排序
  • B. 插入排序
  • C. 冒泡排序
  • D. 计数排序
  1. 若输入 mxoj is the best online judge,输出为( )。 {{ select(27) }}
  • A. 120 120
  • B. 120 119
  • C. 120 117
  • D. 122 120

(3)

 1 #include <iostream>
 2 using namespace std;
 3 int n,p,a;
 4 int main() {
 5   cin >> n; // 保证输入在 int 范围内
 6   while (n > 1) {
 7     for (p=2; p<=n; p++)
 8       if (n % p == 0) break;
 9     for (a=0; n%p==0; n/=p) a++;
10     cout << p << " " << a <<endl;
11   }
12   return 0;
13 }

判断题

  1. 若输入正整数,则程序在有限步内一定会结束。 {{ select(28) }}
  • A. 正确
  • B. 错误
  1. 如有输出,输出的 a 永远是正的。 {{ select(29) }}
  • A. 正确
  • B. 错误
  1. 最坏情况下程序的时间复杂度为 O(n2)O(n^2)。 {{ select(30) }}
  • A. 正确
  • B. 错误
  1. 输出的 p 是逐行严格递增的。 {{ select(31) }}
  • A. 正确
  • B. 错误

选择题

  1. 若输入 72,则共输出( )个数。 {{ select(32) }}
  • A. 1
  • B. 2
  • C. 3
  • D. 4
  1. n=2..100n = 2..100 依次运行以上程序,输出的总行数最接近( )。 {{ select(33) }}
  • A. 50
  • B. 100
  • C. 150
  • D. 200

三、完善程序(单选题,每小题 3 分,共计 30 分)

(1)

(子矩阵)输入一个 n1×m1n_1 \times m_1 的矩阵 aa 和一个 n2×m2n_2 \times m_2 的矩阵 bb,问 aa 中是否存在一个子矩阵和 bb 相等;若存在,则输出所有子矩阵左上角的坐标;若不存在,则输出 There is no answer。子矩阵指从 aa 中选出连续的 n2n_2 行和 m2m_2 列。相等指每个对应位置的值相等。

样例输入:4 5 1 4 3 2 5 5 6 3 2 1 2 4 5 6 8 3 5 4 3 2 2 3 6 3 2 4 5 6

样例输出:2 2

 1 #include <iostream>
 2 using namespace std;
 3 const int SIZE = 50;
 4 int n1, m1, n2, m2, a[SIZE][SIZE], b[SIZE][SIZE];
 5 int main() {
 6   int i, j, k1, k2;
 7   bool good, haveAns;
 8   cin >> n1 >> m1;
 9   for(i = 1; i <= n1; i++)
10     for(j = 1; j <= m1; j++) cin >> a[i][j];
11   cin >> n2 >> m2;
12   for(i = 1; i <= n2; i++)
13     for(j = 1; j <= m2; j++) cin >> b[i][j];
14   ①;
15   for (i = 1; i <= n1 - n2 + 1; i++)
16     for (j = 1; j <= ②; j++) {
17       ③;
18       for (k1 = 1; k1 <= n2; k1++)
19         for (k2 = 1; k2 <= m2; k2++) {
20           if (④ != b[k1][k2])
21             good = false;
22         }
23       if (good) {
24         cout << i << ' ' << j << endl;
25         ⑤;
26       }
27     }
28   if (!haveAns)
29     cout << "There_is_no_answer" << endl;
30   return 0;
31 }
  1. ① 处应填( )。 {{ select(34) }}
  • A. haveAns = true
  • B. haveAns = false
  • C. good = true
  • D. good = false
  1. ② 处应填( )。 {{ select(35) }}
  • A. n1 + n2 - 1
  • B. m1 - m2 + 1
  • C. n1 - m1 + 1
  • D. m1 + m2 - 1
  1. ③ 处应填( )。 {{ select(36) }}
  • A. haveAns = true
  • B. haveAns = false
  • C. good = true
  • D. good = false
  1. ④ 处应填( )。 {{ select(37) }}
  • A. a[i + k1 - 1][j + k2 - 1]
  • B. a[i + k1][j + k2]
  • C. a[i - k1 - 1][j - k2 - 1]
  • D. a[i - k1][j - k1]
  1. ⑤ 处应填( )。 {{ select(38) }}
  • A. haveAns = true
  • B. haveAns = false
  • C. good = true
  • D. good = false

(2)

(高精度加法)输入两个大数,位数不超过 100(保证首位不是 0)。使用数组存储大整数,数组的每个元素存储一位数,输出两数之和。

样例输入:1234567 2345678

样例输出:3580245

 1 #include <iostream>
 2 #include <string>
 3 #define SIZE 200
 4 using namespace std;
 5
 6 int x[2][SIZE]; // x[0], x[1] 存放两个加数
 7
 8 void converts(int d,string s) {
 9   int i,len = ①;
10   for (i=0; i<len; i++)
11     x[d][i] = s[len-i-1] - '0';
12 }
13
14 void add() {
15   for (int i=0;i<SIZE;i++) {
16     x[0][i] += x[1][i];
17     if (②) {
18       x[0][i+1]++;
19       ③;
20     }
21   }
22 }
23
24 void print(int d) {
25   int i;
26   for (i=SIZE-1; i>0; i--)
27     if (x[d][i]) ④;
28   for (; i>=0; i--) cout << x[d][i];
29   cout<<endl;
30 }
31
32 int main() {
33   string s1,s2;
34   cin>>s1>>s2;
35   converts(0,s1);
36   converts(1,s2);
37   add();
38   ⑤;
39   return 0;
40 }
  1. ① 处应填( )。 {{ select(39) }}
  • A. 0
  • B. 1
  • C. s.length()
  • D. s.length()-1
  1. ② 处应填( )。 {{ select(40) }}
  • A. x[0][i]>=10
  • B. x[0][i]>10
  • C. x[1][i]>=10
  • D. x[1][i]>10
  1. ③ 处应填( )。 {{ select(41) }}
  • A. x[0][i]+=10
  • B. x[0][i]-=10
  • C. x[1][i]+=10
  • D. x[1][i]-=10
  1. ④ 处应填( )。 {{ select(42) }}
  • A. return
  • B. continue
  • C. cout<<x[d][i]
  • D. break
  1. ⑤ 处应填( )。 {{ select(43) }}
  • A. print(0)
  • B. print(1)
  • C. print(2)
  • D. print(3)