A. 2025 CSP-J第一轮模拟赛2
2025 CSP-J第一轮模拟赛2
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
- C++是一种面向对象的程序设计语言。在 C++中,下面哪个关键字用于声明一个类,其缺省继承方式为 private 继承?( ) {{ select(1) }}
- union
- struct
- class
- enum
2.下述代码实现的数据结构是( )
sturct Node{
int x;
int *next;
int *pre;
};
{{ select(2) }}
- 链表
- 栈
- 队列
- 平衡树
3.C++语言中,以 0b 开头的数为( )进制数。 {{ select(3) }}
- 二进制
- 八进制
- 十进制
- 十六进制
4.根结点的高度为 1,高度为 5 的完全二叉树至少有( )个结点。 {{ select(4) }}
- 15
- 16
- 31
- 32
5.右图所示的二叉树,其后序遍历的结果是什么?( )

{{ select(5) }}
- acedgbf
- fbacdge
- edgcabf
- egdcfba
- 如果x=true,y=false,z=false下列表达式运算表达式结果为true的是( )。 {{ select(6) }}
- x&&y&&z
- x||y&&z
- !x||y||z
- x&&y||z
7.十进制数 10.375 转换为八进制数的结果为( )。 {{ select(7) }}
- 10.5
- 10.3
- 12.5
- 12.3
8.假设有一组字符{g,h,i,j,k,l},它们对应的频率分别为 8%,14%,17%,20%,23%,18%。请问以下哪个选项是字符 g,h,i,j,k,l 分别对应的一组哈夫曼编码?( ) {{ select(8) }}
- g: 1100, h: 1101, i: 111, l: 10, k: 00, j: 01
- g: 0000, h: 001, i: 010, l: 011, k: 10, j: 11
- g: 111, h: 110, i: 101, l: 100, k: 01, j: 00
- g: 110, h: 111, i: 101, l: 100, k: 0, j: 01
9.中缀表达式 ((6 – 3) * 2 + 7) / (5 ^ (3 * 4 + 2))对应的后缀表达式为( )。 {{ select(9) }}
- / + * - 6 3 2 7 ^ 5 + * 3 4 2
- 6 3 2 - * 7 + 5 3 4 * 2 + ^ /
- 6 3 – 2 * 7 + 5 3 4 * 2 + ^ /
- 6 3 – 2 * 7 + 3 4 * 2 + 5 ^ /
10.将 3 个相同的红球和 3 个相同的黑球装入三个不同的袋中,每袋均装 2 个球,则不同的装法总数为( ) {{ select(10) }}
- 7
- 8
- 9
- 10
- 从 2 至 8 的 7 个整数中随机取 2 个不同的数,这两个数互质的概率为( )。 {{ select(11) }}
- 1/6
- 1/3
- 1/2
- 2/3
12.以下哪一种算法典型地使用了分治法的思想来解决问题?( ) {{ select(12) }}
- 线性搜索
- 快速排序
- 冒泡排序
- 插入排序
13.考虑右图所示的无向图,度最大的结点为( )号结点。

{{ select(13) }}
- 3
- 4
- 5
- 6
14.有a,b,c,d,e,f依次入栈,如果执行入栈、入栈、出栈、入栈、入栈、出栈的操作后,栈顶元素是( )
{{ select(14) }}
- b
- c
- d
- e
15.现计划构造哈希函数 ℎ(𝑥) = 𝑥 mod 𝑚,其中𝑥 是输入的数字15,23,62,31,53,那么𝑚为何值,不会产生冲突。 {{ select(15) }}
- 10
- 11
- 12
- 13
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分) 第 1 题
#include<bits/stdc++.h>
using namespace std;
int n,p[1000000];
bool isperfect(int x){
int s=0;
for(int i=1;i<x;i++){//第五行
if(x%i==0){
s+=i;
p[x]=i;
}
}
if(s==x) return true;
else return false;
}
int main(){
cin>>n;
for(int i=2;i<=n;i++){
if(isperfect(i)){
cout<<i<<" ";
}
}
}
16.改变程序的第五行,i从2开始,并不影响程序的运行。 {{ select(16) }}
- 正确
- 错误
17.当程序输入10时,输出2 3 5 7。 {{ select(17) }}
- 正确
- 错误
18.当输入1000000时,程序不会发生越界访问。 {{ select(18) }}
- 正确
- 错误
19.当程序输入10时,输出的内容是 {{ select(19) }}
- 2 3 5 7
- 19
- 17
- 6
- 当程序输入30时,输出的数字之和是( )。 {{ select(20) }}
- 54
- 6
- 34
- 28
第 2 题
#include <iostream>
#include <vector>
using namespace std;
int longestCommonSubsequence(string text1, string text2) {
int m = text1.length();
int n = text2.length();
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (text1[i - 1] == text2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[m][n];
}
int main() {
string text1 ;
string text2 ;
cin>>text1>>text2;
cout << longestCommonSubsequence(text1, text2) << endl;
return 0;
}
21.当输入abc ac时,输出为ac。 {{ select(21) }}
- 正确
- 错误
22.text1.length()修改为strlen(text1),程序行为不变。( ) {{ select(22) }}
- 正确
- 错误
23.(2 分)程序总是输出两个字符串中相同的字母个数。 {{ select(23) }}
- 正确
- 错误
24.当输入123123765 23231123时,程序的输出为( )。 {{ select(24) }}
- 4
- 5
- 6
- 7
25.(4 分)如果输入abdefss bfedess,程序的输出为( )。 {{ select(25) }}
- 4
- 5
- 6
- 7
26.若将代码中的dp[i][j] = dp[i - 1][j - 1] + 1; 修改为dp[i][j] = dp[i - 1][j - 1] ; 代码中的dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);修改为dp[i][j] = min(dp[i - 1][j], dp[i][j - 1])+1;,输入 abc ac时,程序的输出为( )。 {{ select(26) }}
- 1
- 2
- 3
- 4
第 3 题
#include<iostream>
#include<vector>
using namespace std;
vector<int> graph[100];
bool visited[100];
void dfs(int node,int tar,int t) {
visited[node] = true;
cout << node << " ";
for (int i = 0; i < graph[node].size(); i++) {
int neighbor = graph[node][i];
if (!visited[neighbor]) {
dfs(neighbor,tar,t+1);
}
}
}
int main() {
int n, m , start ,end;
cin >> n >> m >> start >> end;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
graph[u].push_back(v);
graph[v].push_back(u);
}
dfs(start,end,0);
return 0;
}
27.该程序实现了图的深度优先搜索遍历( )。 {{ select(27) }}
- 正确
- 错误
28.该图是无向图( )。 {{ select(28) }}
- 正确
- 错误
29.如果图有环,该程序会陷入死循环( ) {{ select(29) }}
- 正确
- 错误
30.输入以下数据5 4 0 4 0 1 0 2 1 3 1 4后,程序的输出是( )。 {{ select(30) }}
- 0 1 3 4 2
- 0 1 2 3 4
- 0 2 1 3 4
- 0 1 3 2 4
31.输入以下数据5 4 2 3 0 2 0 1 1 4 1 3 后,程序的输出是( )。 {{ select(31) }}
- 0 1 3 4 2
- 2 1 0 3 4
- 0 2 1 3 4
- 2 0 1 4 3
32.若将程序的cout << node << " "; 改为if(node==tar) cout << t << " " ;,并输入5 4 0 4 0 1 0 2 1 3 1 4,则程序的最终输出为( ) {{ select(32) }}
- 0
- 1
- 2
- 3
三、完善程序(单选题,每小题 3 分,共计 30 分)
第 1 题
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。 输入一行一个字符串 s,表示后缀表达式,@ 为表达式的结束符号, . 作为数字结束的符号,求出该表达式的值。 例如34.12.*表示34 * 12
试补全程序。
#include<iostream>
#include<stack>
using namespace std;
int a,b;
stack<int > st;
int main(){
char s;
while(cin>>s && s != ①){
if(s>='0' and s<='9'){
int num=0;
num += s-'0';
while(cin>>s && s!='.'){
②
num+=s-'0';
}
st.push(③);
}
switch(④){
case '+': a=st.top();st.pop();b=st.top();st.pop();st.push(a+b);break;
case '-': a=st.top();st.pop();b=st.top();st.pop();st.push(b-a);break;
case '*': a=st.top();st.pop();b=st.top();st.pop();st.push(a*b);break;
case '/': a=st.top();st.pop();b=st.top();st.pop();st.push(b/a);break;
}
}
cout<<⑤;
}
33.① 处应填( ) {{ select(33) }}
- 0
- 1
- "\n"
- @
34.② 处应填( )。 {{ select(34) }}
- num<<1;
- num>>1;
- num*=10;
- num/=10;
35.③ 处应填( )。 {{ select(35) }}
- s
- num
- s+num
- s-num
36.④ 处应填( )。 {{ select(36) }}
- s
- num
- s+num
- s-num
37.⑤ 处应填( )。 {{ select(37) }}
- st.top()
- st.front()
- s
- num
第2题
有 2^n(n≤7)个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。给出各个国家的能力值,请问亚军是哪个国家?
试补全程序。
#include<iostream>
#include<cmath>
using namespace std;
int n;
int gj[1000]={0};
int dfs(int i){
if(i>=pow(2,n)) return ①;
else{
gj[i]= max(dfs(2*i),dfs(②));
return gj[i];
//cout<<gj[i]<<" ";
}
}
int main(){
cin>>n;
for(int i=③;i<pow(2,n+1);i++){
cin>>gj[i];
}
dfs(1);
int yj=gj[2]>gj[3]?gj[3]:gj[2];
for(int i=pow(2,n);i<pow(2,n+1);i++){
if( ④== yj ){
cout<< ⑤ ;break;
}
}
}
38.① 处应填( )。 {{ select(38) }}
- gj[i]
- i
- 0
- 1
39.② 处应填( )。 {{ select(39) }}
- 2*i
- i+1
- 2*i+1
- 3*i+1
40.③ 处应填( ) {{ select(40) }}
- 0
- 1
- pow(2,n)
- n
41.④ 处应填( )。 {{ select(41) }}
- i
- gj[i]
- gj[n]
- i+1
42.⑤ 处应填( ) {{ select(42) }}
- i
- pow(2,i)
- i-pow(2,n)
- i-pow(2,n)+1