#1458. 普及组 CSP-J 2026 初赛模拟卷 8
普及组 CSP-J 2026 初赛模拟卷 8
普及组 CSP-J 2026 初赛模拟卷 8
一、单项选择题(共 题,每题 分,共计 分;每题有且仅有一个正确选项)
{{ select(1) }} CCF 的中文全称是( )。
- 中国计算机协会
- 中国计算机行会
- 中国计算机学会
- 中国计算机公会
{{ select(2) }} 汉字输入方法实质上是对汉字进行编码。下面不是汉字输入方法的编码方式的是( )。
- 音码
- 形码
- 音形码
- ASCII 码
{{ select(3) }}
表达式 a * (b + c) * d 的后缀形式是( )。
a b c d * + *a b c + * d *a * b c + * db + c * a * d
{{ select(4) }} 在以下各项中,不是操作系统的是( )。
- Sybase
- Linux
- Solaris
- Symbian
{{ select(5) }} 二进制数 和 的和是( )。
{{ select(6) }} 微型计算机在工作中电源突然中断,再次通电后数据不能恢复的是( )。
- ROM 和 RAM 中的信息
- ROM 中的信息
- RAM 中的信息
- 硬盘中的信息
{{ select(7) }} 从一个 的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格(不计顺序),有( )种方法。
{{ select(8) }} 关于汇编语言,下列说法中错误的是( )。
- 是一种与具体硬件相关的程序设计语言
- 在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试
- 可以直接访问寄存器、内存单元,以及 I/O 端口
- 随着高级语言的诞生,如今已完全被淘汰,不再使用
{{ select(9) }} 同时掷出 枚完全相同的六面骰子,每枚骰子上有 到 的数字。将得到的点数排序后,有( )种不同的结果。
{{ select(10) }} 某个 MV 是一段时长 分钟的视频文件。它每秒播放 帧图像,每帧图像是一幅分辨率为 像素 像素(长宽比为 )的 位真彩色图像,其画面没有被压缩。这个视频没有音频。这个视频文件大约需要占用( )的存储空间。
{{ select(11) }} 一个有符号单字节能表达的最小二进制数是( )。
{{ select(12) }} 前序遍历序列与后序遍历序列相同的二叉树为( )。
- 非叶节点只有左子树的二叉树
- 只有根节点的二叉树
- 根节点无右子树的二叉树
- 非叶节点只有右子树的二叉树
{{ select(13) }} 下面有关数制的式子中,正确的是( )。
{{ select(14) }} 若对于所有规模为 的输入,一个算法均恰好进行( )次运算,则可以说该算法的时间复杂度为 。
{{ select(15) }} 若 , , ,则随着 的增大, 将接近于( )。
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 ,错误填 ;除特殊说明外,判断题每题 分,选择题每题 分,共计 分)
(1)
#include <iostream>
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;
}
判断题
{{ input(16) }} ( 分)
主函数中的 for 循环总共执行 次。( )
{{ input(17) }}
rSum 这个函数的返回值 sum 一定不会大于 。( )
{{ input(18) }} 假设 , 足够大,则输出个数的量级逐渐趋近于 。( )
{{ input(19) }} 输入任意两个取值范围为 的整数,输出个数都不超过 。( )
选择题
{{ select(20) }}
若输入 190 230,总共会输出( )个数。
{{ select(21) }} 假设 和 是相同量级(),则该算法的时间复杂度为( )。
(2)
#include <iostream>
#include <string>
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;
}
判断题
{{ input(22) }} ( 分)
getline() 会将一整行连空格一起输入到字符串中。( )
{{ input(23) }} 输出的两个整数不可能相同。( )
{{ input(24) }}
去掉 else 这几个字符,则可能出现 的情况。( )
{{ input(25) }} 若输入长度为 且仅含小写字母的随机字符串,则输出结果中 的值越大,其出现的可能性越小。( )
选择题
{{ select(26) }} 维护 和 的过程最接近( )。
- 选择排序
- 插入排序
- 冒泡排序
- 计数排序
{{ select(27) }}
若输入 mxoj is the best online judge,输出为( )。
120 120120 119120 117122 120
(3)
#include <iostream>
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;
if (a==0) n%=p; else n/=p;
a=0; n%p==0; n/=p; a++;
cout << p << "\t" << a <<endl;
}
return 0;
}
判断题
{{ input(28) }} 若输入正整数,则程序在有限步内一定会结束。( )
{{ input(29) }} 如有输出,输出的 永远是正的。( )
{{ input(30) }} 最坏情况下程序的时间复杂度为 。( )
{{ input(31) }} 输出的 是逐行严格递增的。( )
选择题
{{ select(32) }} 若输入 ,则其输出( )个数。
{{ select(33) }} 对 依次运行以上程序,输出的总行数最接近( )。
三、完善程序(单选题,每小题 分,共计 分)
(1)(子矩阵)输入一个 的矩阵 和一个 的矩阵 ,问 中是否存在一个子矩阵和 相等?若存在,则输出所有子矩阵左上角的坐标;若不存在,则输出 There is no answer。子矩阵指从 中选出连续的 行和 列。相等指每个对应位置的值相等。
样例输入: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
#include <iostream>
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 << '\t' << j << endl;
⑤;
}
}
if (!haveAns)
cout << "There is no answer" << endl;
return 0;
}
{{ select(34) }} ①处应填( )。
haveAns = truehaveAns = falsegood = truegood = false
{{ select(35) }} ②处应填( )。
{{ select(36) }} ③处应填( )。
haveAns = truehaveAns = falsegood = truegood = 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 = truehaveAns = falsegood = truegood = false
(2)(高精度加法)输入两个大整数,位数不超过 (保证首位不是 )。使用数组存储大整数,数组的每个元素存储一位数,输出两数之和。
样例输入:
1234567
2345678
样例输出:3580245
#include <iostream>
#include <string>
#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) }} ①处应填( )。
s.length()s.length()-1
{{ select(40) }} ②处应填( )。
x[0][i]>=10x[0][i]>10x[1][i]>=10x[1][i]>10
{{ select(41) }} ③处应填( )。
x[0][i]+=10x[0][i]-=10x[1][i]+=10x[1][i]-=10
{{ select(42) }} ④处应填( )。
returncontinuecout<<x[d][i]break
{{ select(43) }} ⑤处应填( )。
print(0)print(1)print(2)print(3)