试卷 CSP 2023 入门级第一轮
CSP 2023 入门级第一轮
单项选择题
第 1 题    单选题

在 C++ 中,下面哪个关键字用于声明一个变量, 其值不能被修改?

A.

unsigned

B.

const

C.

static

D.

mutable

第 2 题    单选题

八进制数12345670(8)和07654321(8) 的和为()

A.

(22222221)8

B.

(21111111)8

C.

(22111111)8

D.

(22222211)8

第 3 题    单选题

阅读下述代码,请问修改data 的 value 成员以存储3 . 14,正确的方式是()

union Data{

 int num;

 float value;

 char symbol;

};

union Data data;

A.

data.value =3.14;

B.

value.data=3.14;

C.

data->value = 3.14;

D.

value->data = 3.14;

第 4 题    单选题

假设有一个链表的节点定义如下: struct Node { int data; Node* next; } 现在有一个指向链表头部的指针:Node* head。如果想要在链表中插入一个新节点,其成 员data的值为42,并使新节点成为链表的第一个节点,下面哪个操作是正确的?

A.

Node* newNode = new Node; newNode->data = 42; newNode->next = head; head = newNode;

B.

Node* newNode = new Node; head->data = 42; newNode->next = head; head = newNode;

C.

Node* newNode = new Node; newNode->data = 42; head->next = newNode;

D.

Node* newNode = new Node; newNode->data = 42; newNode->next = head;

第 5 题    单选题

根节点的高度为1,一 棵拥有2023个节点的三叉树高度至少为()。

A.

6

B.

7

C.

8

D.

9

第 6 题    单选题

小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱 歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息。则小明一共 有()种选择时间段的方案。

A.

31

B.

18

C.

21

D.

33

第 7 题    单选题

以下关于高精度运算的说法错误的是()

A.

高精度计算主要是用来处理大整数或需要保留多位小数的运算

B.

大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数 乘以某个数,通过减法得到新的被除数,并累加商

C.

高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关

D.

高精度加法运算的关键在于逐位相加并处理进位

第 8 题    单选题

后缀表达式 “ 6 2 3 + - 3 8 2 / + * 2 ^ 3 + ” 对应的中缀表达式是

A.

((6-(2+3))*(3+8/2))^2+3

B.

6-2+3*3+8/2^2+3

C.

(6-(2+3))*((3+8/2)^2)+3

D.

6-((2+3)*(3+8/2))^2+3

第 9 题    单选题

数101010(2)和166(8)的和为()

A.

.(10110000)2

B.

(236)8

C.

(158)10

D.

(A0)16

第 10 题    单选题

假 设 有 一 组 字 符 {a,b,c,d,e,f}, 对应的频率分别为5%、9%、12%、13%、 16%、45%。请问以下哪个选项是字符 a,b,c,d,e,f 分 别 对 应 的 一 组 哈 夫 曼 编 码 ?

A.

1111,1110,101,100,110,0

B.

1010,1001,1000,011,010,00

C.

000,001,010,011,10,11

D.

1010,1011,110,111,00,01

第 11 题    单选题

给 定 一 棵 二 叉 树 , 其 前 序 遍 历 结 果 为 :ABDECFG, 中 序 遍 历 结 果 为 :DEBACFG。 请 问 这 棵树 的 正 确 后 序 遍 历 结 果 是 什 么 ?

A.

EDBGFCA

B.

EDBGCF

C.

DEBGFCA

D.

DBEGFCA

第 12 题    单选题

考 虑 一 个 有 向 无 环 图 , 该 图 包 含 4 条 有 向 边 : ( 1 , 2 ) , ( 1 , 3 ) , ( 2 , 4 ) 和 ( 3 , 4 ) 。 以 下 哪 个选 项 是 这 个 有 向 无 环 图 的 一 个 有 效 的 拓 扑 排 序 ?


A.

4,2,3,1

B.

1,2,3,4

C.

1,2,4,3

D.

2,1,3,4

第 13 题    单选题

在计算机中,以下哪个选项描述的数据存储容量最小()

A.

字节 (byte)

B.

比特 (bit)

C.

字 (word)

D.

千 字 节 (kilobyte)

第 14 题    单选题

一 个 班 级 有 1 0 个 男 生 和 1 2 个 女 生 。 如 果 要 选 出 一 个 3 人 的 小 组 , 并 且 小 组 中 必 须 至 少 包含 1 个 女 生 , 那 么 有 多 少 种 可 能 的 组 合 ? ( )

A.

1420

B.

1770

C.

1540

D.

2200

第 15 题    单选题

以 下 哪 个 不 是 操 作 系 统 ? ( )

A.

Linux

B.

Windows

C.

Android

D.

HTML

阅读程序
第 16-20 题    组合题

阅读以下代码:

#include<iostream>
#include<cmath>
using namespace std;
double f(double a,double b,double c) {
	double s=(a+b+c)/2;
	return sqrt(s*(s-a)*(s-b)*(s-c));
}
int main() {
	cout.flags(ios::fixed);
	cout.precision(4);
	int a,b,c;
	cin>>a>>b>>c;
	cout<<f(a,b,c)<<endl;
	return 0;
}

假设输入的所有数都为不超过1000的正整数,完成下面的判断题和单选题:

判断题

1、(2分)当输入为“2 2 2”时,输出为“1.7321”( )

2、(2分)将第7行中的"(s-b)*(s-c)"改为"(s-c)*(s-b)"不会影响程序运行的结

果( )

3、(2分)程序总是输出四位小数( )

单选题

4、当输入为“3 4 5”时,输出为( )

A."6.0000" B. "12.0000" C. "24.0000" D. "30.0000"

6、当输入为“5 12 13”时,输出为( )

A. "24.0000" B. "30.0000" C. "60.0000" D. "120.0000"

答题须知

1.判题时不忽略大小写,如答案为B,而你输入的答案为b,则会被判错!

2.判断题 A代表正确、B代表错误**

第一空(2分):_______________

第二空(2分):_______________

第三空(2分):_______________

第四空(3分):_______________

第五空(3分):_______________

第 16 题 填空
第 17 题 填空
第 18 题 填空
第 19 题 填空
第 20 题 填空
第 21-26 题    组合题

阅读代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int f(string x,string y) {
	int m=x.size();
	int n=y.size();
	vector<vector<int>>v(m+1,vector<int>(n+1,0));
	for(int i=1; i<=m; i++) {
		for(int j=1; j<=n; j++) {
			if(x[i-1]==y[j-1]) {
				v[i][j]=v[i-1][j-1]+1;
			} else {
				v[i][j]=max(v[i-1][j],v[i][j-1]);
			}
		}
	}
	return v[m][n];
}

bool g(string x,string y) {
	if(x.size() != y.size()) {
		return false;
	}
	return f(x+x,y)==y.size();
}

int main() {
	string x,y;
	cin>>x>>y;
	cout<<g(x,y)<<endl;
	return 0;
}

判断题

1.f函数的返回值小于等于min(n,m)。()

2.f函数的返回值等于两个输入字符串的最长公共子串的长度。()

3.当输入两个完全相同的字符串时,g 函数的返回值总是 true。()

单选题

4.将第19行中的“v[m][n]”替换为“v[n][m]”,那么该程序()。

A. 行为不变

B. 只会改变输出

C. 一定非正常退出

D. 可能非正常退出

5.当输入为“csp-j p-jcs”时,输出为()。

A. “0”

B. “1”

C. “T”

D. “F”

6.当输入为“csppsc spsccp”时,输出为()。

A. “T”

B. “F”

C. “0”

D. “1”

第一空(1.5分):___________

第二空(1.5分):___________

第三空(1.5分):___________

第四空(3分):___________

第五空(3分):___________

第六空(3分):___________


第 21 题 填空
第 22 题 填空
第 23 题 填空
第 24 题 填空
第 25 题 填空
第 26 题 填空
第 27-32 题    组合题

阅读代码

#include <iostream>
#include <cmath>
using namespace std;

int solve1(int n) {
	return n*n;
}

int solve2(int n) {
	int sum=0;
	for(int i=1; i<=sqrt(n); i++) {
		if(n%i==0) {
			if(n/i==i) {
				sum+=i*i;
			} else {
				sum+=i*i+(n/i)*(n/i);
			}
		}
	}
	return sum;
}

int main() {
	int n;
	cin>>n;
	cout<<solve2(solve1(n))<<" "<<solve1((solve2(n)))<<endl;
	return 0;
}

假设输入的n是绝对值不超过1000的整数,完成下面的判断题和单选题。

判断题

1、如果输入的n为正整数,solve2函数的作用是计算n所有的因子的平方和( )

2、第13~14行的作用是避免n的平方根因子i(或n/i)进入第16行而被计算两次( )

3、如果输入的n为质数,solve2(n)的返回值为n2+1( )

单选题

4、(4分)如果输入的n为质数p的平方,那么solve2(n)的返回值为( )

A. p2+p+1 B. n2+n+1 C. n2+1 D. p4+2p2+1

5、当输入为正整数时,第一项减去第二项的差值一定( )

A. 大于0 B. 大于等于0且不一定大于0 C. 小于0 D. 小于等于0且不一定小于0

6、当输入为“5”时,输出为( )

A. "651.625" B. "650.729" C. "651.676" D. "652.625"

答题须知

1.判题时不忽略大小写,如答案为B,而你输入的答案为b,则会被判错!

2.判断题 A代表正确、B代表错误**

第一空(1.5分):___________

第二空(1.5分):___________

第三空(1.5分):___________

第四空(4分):___________

第五空(3分):___________

第六空(3分):___________

第 27 题 填空
第 28 题 填空
第 29 题 填空
第 30 题 填空
第 31 题 填空
第 32 题 填空
完善程序
第 33-37 题    组合题

(寻找被移除的元素)问题:原有长度为 n+1公差为1等升数列,将数列输到程序的数

组时移除了一个元素,导致长度为 n 的开序数组可能不再连续,除非被移除的是第一个或最

后之个元素。需要在数组不连续时,找出被移除的元素。试补全程序。

#include <iostream
#include <vector>

using namespace std;

int find missing(vector<int>& nums) (
    int left = 0, right = nums.size() - 1;
while (left < right) {
int mid = left + (right left) / 2;
	if (nums[mid] - mid+ ①) (
		    ②;
	}
else {
	③
}
}
return ④;
}

int main() (
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i= 0; i< n; i++) cin >> nums[i];
    int missing_number = find_missing(nums);
if_(missing_number == ⑤) {
cout << "Sequence is consecutive" << endl;
}
else {
cout << "Missing number is " << ,missing numbeer << endl;
}
return 0;
}

1、 ①处应填( )

A. 1 B.nums[0] C.right D.left

2、 ②处应填( )

A. left=mid+1 B.right=mid-1 C.right=mid D.left=mid

3、 ③处应填( )

A.left=mid+1 B.right=mid-1 C.right=mid D.left=mid

4、 ④处应填( )

A.left+nums[0] B.right+nums[0] C.mid+nums[0] D.right+1

5、 ⑤处应填( )

A.nums[0]+n B.nums[0]+n-1 C.nums[0]+n+1 D.nums[n-1]

答题须知

1.判题时不忽略大小写,如答案为B,而你输入的答案为b,则会被判错!

2.判断题 A代表正确、B代表错误**

第一空(3分):___________

第二空(3分):___________

第三空(3分):___________

第四空(3分):___________

第五空(3分):___________

第 33 题 填空
第 34 题 填空
第 35 题 填空
第 36 题 填空
第 37 题 填空
第 38-42 题    组合题

(编辑距离)给定两个字符串,每次操作可以选择删除(Delete)、插入

(Insert)、替换(Replace),一个字符,求将第一个字符串转换为第二个字符串所需要

的最少操作次数。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int min(int x,int y,int z) {
	return min(min(x,y),z);
}

int edit_dist_dp(string str1,string str2) {
	int m=str1 length();
	int n=str2 length();
	vector<vector<int>> dp(m+1,vector<int>(n+1));

	for(int i=0; i<=m; i++) {
		for(int j=0; j<=n; j++) {
			if(i==0)
				dp[i][j]=(1);
			else if(j==0)
				dp[i][j]=(2);
			else if((3))
				dp[i][j]=(4);
			else
				dp[i][j]=1+min(dp[i][j-1],dp[i-1][j],(5));
		}
	}
	return dp[m][n];
}

int main() {
	string str1,str2;
	cin>>str1>>str2;
	cout<<"Mininum number of operation:"
	    <<edit_dist_dp(str1,str2)<<endl;
	return 0;
}

1、 ①处应填( )

A.j B.i C.m D.n

2、②处应填( )

A.j B.i C.m D.n

3、③处应填( )

A. str1[i-1]==str2[j-1] B. str1[i]==str2[j]

C. str1[i-1]!=str2[j-1] D. str1[i]!=str2[j]

4、④处应填( )

A. dp[i-1][j-1]+1 B. dp[i-1][j-1]

C. dp[i-1][j] D. dp[i][j-1]

5、⑤处应填( )

A. dp[i][j] + 1 B. dp[i-1][j-1]+1

C. dp[i-1][j-1] D. dp[i][j]

答题须知

1.判题时不忽略大小写,如答案为B,而你输入的答案为b,则会被判错!

2.判断题 A代表正确、B代表错误**

第一空(3分):___________

第二空(3分):___________

第三空(3分):___________

第四空(3分):___________

第五空(3分):___________

第 38 题 填空
第 39 题 填空
第 40 题 填空
第 41 题 填空
第 42 题 填空
答题卡
单项选择题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
阅读程序
完善程序
题目总数:20
总分数:100
时间:120分钟
QQ
微信