#181. CSP-J 2026 初赛模拟卷 8
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)