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

0

CSP-J 2026 初赛模拟卷 8

CSP-J 2026 初赛模拟卷 8 一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项) CCF的中文全称是( ) {{ select(1) }}

中国计算机协会

中国计算机行会

中国计算机学会

中国计算机公会

汉字输入方法实质上是对汉字进行编码,下面不是汉字输入方法的编码方式的是( )。 {{ select(2) }}

音码

形码

音形码

ASCII码

表达式 a ∗ ( b + c ) ∗ d a∗(b+c)∗d 的后缀形式是( ) {{ select(3) }}

a b c d * * *

a b c + * d *

a * b c + * d

b + c * a * d

在以下各项中,不是操作系统的是( ) {{ select(4) }}

Sybase

Linux

Solaris

Symbian

二进制数00101100和00010101的和是( ) {{ select(5) }}

00101000

01000001

01000100

00111000

微型计算机在工作中电源突然中断,再次通电后数据不能恢复的是( )。 {{ select(6) }}

ROM和RAM中的信息

ROM中的信息

RAM中的信息

硬盘中的信息

从一个 4 × 4 4×4 的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格(不计顺序),有( )种方法。 {{ select(7) }}

72

144

256

128

关于汇编语言,下列说法中错误的是( )。 {{ select(8) }}

是一种与具体硬件相关的程序设计语言

在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试

可以直接访问寄存器、内存单元,以及I/O端口

随着高级语言的诞生,如今已完全被淘汰,不再使用

同时掷出3枚完全相同的六面骰子,每枚骰子上有1到6的数字。将得到的点数排序后,有( )种不同的结果。 {{ select(9) }}

208

56

216

120

某个MV是一段时长4分钟的视频文件。它每秒播放10帧图像,每帧图像是一幅分辨率为2048像素 × 1152 ×1152 像素(长宽比为16:9)的32位真彩色图像,其画面没有被压缩。这个视频没有音频。这个视频文件大约需要占用( )的存储空间。 {{ select(10) }}

21GB

27GB

168GB

2GB

一个有符号单字节能表达的最小二进制数是( ) {{ select(11) }}

10000000

11111111

01111111

00000000

前序遍历序列与后序遍历序列相同的二叉树为( ) {{ select(12) }}

非叶节点只有左子树的二叉树

只有根节点的二叉树

根节点无右子树的二叉树

非叶节点只有右子树的二叉树

下面有关数制的式子中,正确的是( ) {{ select(13) }}

( A 2 B . C 5 ) 16

( 101000101011.01011100 ) 2 (A2B.C5) 16 ​ =(101000101011.01011100) 2 ​

( 2 ) 8 × ( 6 ) 8

( 14 ) 8 (2) 8 ​ ×(6) 8 ​ =(14) 8 ​

( 110010 ) 2 + ( 16 ) 10

( 1000100 ) 2 (110010) 2 ​ +(16) 10 ​ =(1000100) 2 ​

( 1000 ) 2

( 8 ) 8 (1000) 2 ​ =(8) 8 ​

若对于所有规模为 n n 的输入,一个算法均恰好进行( )次运算,则可以说该算法的时间复杂度为 O ( 2 n ) O(2 n )。 {{ select(14) }}

2 n + 1 2 n+1

3 n 3 n

n × 2 n n×2 n

2 2 n 2 2n

若 f 0

0 f 0 ​ =0, f 1

1 f 1 ​ =1, f n + 1

( f n + f n − 1 ) / 2 f n+1 ​ =(f n ​ +f n−1 ​ )/2,则随着 i i 的增大, f i f i ​ 将接近于( )。 {{ select(15) }}

1/2

2/3

( 5 − 1 ) / 2 ( 5 ​ −1)/2

1

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 ✓ ✓,错误填 × ×;除特殊说明外,判断题每题2分,选择题每题3分,共计40分) (1) cpplline-numbers #include using namespace std; int rSum(int j) { int sum = 0; while (j != 0) { sum = sum * 10 + (j % 10); j = j / 10; } return sum; } int main() { int n,m; cin >> n >> m; // 保证输入为正整数,且不大于10^9 for (int i=n; i<m; i++) if (i == rSum(i)) cout << i << ' '; return 0; } 判断题 (1分)主函数中的for循环总共执行 m − n m−n 次。 {{ select(16) }}

正确

错误

rSum这个函数的返回值sum一定不会大于j。 {{ select(17) }}

正确

错误

假设 n

1 n=1,m足够大,则输出个数的量级逐渐趋近于 O ( m 0.5 ) O(m 0.5 )。 {{ select(18) }}

正确

错误

输入任意两个取值范围为[1,100]的整数,输出个数都不超过100。 {{ select(19) }}

正确

错误

选择题 若输入190 230,总共会输出( )个数。 {{ select(20) }}

1

2

3

4

假设n和m是相同量级( m

O ( n ) m=O(n)),则该算法的时间复杂度为( )。 {{ select(21) }}

O ( n ) O(n)

O ( n log ⁡ n ) O(nlogn)

O ( n 1.5 ) O(n 1.5 )

O ( n 2 ) O(n 2 )

(2) cpplline-numbers #include #include using namespace std; int main() { string s; char m1,m2; getline(cin,s); m1 = ' '; m2 = ' '; for (int i = 0; i < s.length(); i++){ if (s[i] > m1) { m2 = m1; m1 = s[i]; } else if (s[i] > m2) m2 = s[i]; } cout << int(m1) << ' ' << int(m2) << endl; return 0; } 判断题 (1分)getline()会将一整行连带空格一起输入到字符串中。 {{ select(22) }}

正确

错误

输出的两个整数不可能相同。 {{ select(23) }}

正确

错误

去掉else这几个字符,则可能出现 m 2

m 1 m2>m1 的情况。 {{ select(24) }}

正确

错误

若输入长度为10且仅含小写字母的随机字符串,则输出结果中 m 2 m2 的值越大,其出现的可能性越小。 {{ select(25) }}

正确

错误

选择题 维护m1和m2的过程最接近( )。 {{ select(26) }}

选择排序

插入排序

冒泡排序

计数排序

若输入 moxj is the best online judge,输出为( )。 {{ select(27) }}

120 120

120 119

120 117

122 120

(3) cpplline-numbers #include using namespace std; int n,p,a; int main() { cin >> n; // 保证输入在int范围内 while (n > 1) { for (p=2; p<=n; p++) if (n % p == 0) break; for (a=0; n%p==0; n/=p) a++; cout << p << " " << a << endl; } return 0; } 判断题 若输入正整数,则程序在有限步内一定会结束。 {{ select(28) }}

正确

错误

如有输出,输出的a永远是正的。 {{ select(29) }}

正确

错误

最坏情况下程序的时间复杂度为 O ( n 2 ) O(n 2 )。 {{ select(30) }}

正确

错误

输出的p是逐行严格递增的。 {{ select(31) }}

正确

错误

选择题 若输入72,则共输出( )个数。 {{ select(32) }}

1

2

3

4

对 n

2 … 100 n=2…100 依次运行以上程序,输出的总行数最接近( )。 {{ select(33) }}

50

100

150

200

三、完善程序(单选题,每小题3分,共计30分) (1) 子矩阵查找 cpplline-numbers #include using namespace std; const int SIZE = 50; int n1, m1, n2, m2, a[SIZE][SIZE], b[SIZE][SIZE]; int main() { int i, j, k1, k2; bool good, haveAns; cin >> n1 >> m1; for(i = 1; i <= n1; i++) for(j = 1; j <= m1; j++) cin >> a[i][j]; cin >> n2 >> m2; for(i = 1; i <= n2; i++) for(j = 1; j <= m2; j++) cin >> b[i][j]; ①; for(i = 1; i <= n1 - n2 + 1; i++) for(j = 1; j <= ②; j++) { ③; for(k1 = 1; k1 <= n2; k1++) for(k2 = 1; k2 <= m2; k2++) { if(④ != b[k1][k2]) good = false; } if(good) { cout << i << ' ' << j << endl; ⑤; } } if(!haveAns) cout << "There_is_no_answer" << endl; return 0; } ①处应填( ) {{ select(34) }}

haveAns = true

haveAns = false

good = true

good = false

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

n1+n2-1

m1-m2+1

n1-m1+1

m1+m2-1

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

haveAns = true

haveAns = false

good = true

good = false

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

a[i+k1-1][j+k2-1]

a[i+k1][j+k2]

a[i-k1-1][j-k2-1]

a[i-k1][j-k1]

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

haveAns = true

haveAns = false

good = true

good = false

(2) 高精度加法 cpplline-numbers #include #include #define SIZE 200 using namespace std;

int x[2][SIZE]; // x[0], x[1] 存放两个加数

void converts(int d, string s) { int i, len = ①; for (i = 0; i < len; i++) x[d][i] = s[len - i - 1] - '0'; }

void add() { for (int i = 0; i < SIZE; i++) { x[0][i] += x[1][i]; if (②) { x[0][i+1]++; ③; } } }

void print(int d) { int i; for (i = SIZE - 1; i > 0; i--) if (x[d][i]) ④; for (; i >= 0; i--) cout << x[d][i]; cout << endl; }

int main() { string s1,s2; cin >> s1 >> s2; converts(0, s1); converts(1, s2); add(); ⑤; return 0; } ①处应填( ) {{ select(39) }}

0

1

s.length()

s.length()-1

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

x[0][i] >= 10

x[0][i] > 10

x[1][i] >= 10

x[1][i] > 10

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

x[0][i] += 10

x[0][i] -= 10

x[1][i] += 10

x[1][i] -= 10

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

return

continue

cout << x[d][i]

break

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

print(0)

print(1)

print(2)

print(3)