A. 2025 CSP-J第一轮模拟赛2

    客观题

2025 CSP-J第一轮模拟赛2

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

  1. 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
  1. 如果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
  1. 从 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
  1. 当程序输入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

2025 CSP模拟赛2

未参加
状态
已结束
规则
OI
题目
1
开始于
2025-9-12 19:00
结束于
2025-9-12 21:00
持续时间
2 小时
主持人
参赛人数
18