CSP-J 2023 第一轮试题
CSP-J 2023 第一轮试题
- 场次:2023年CSP-J第1轮
- 考试时长:120 分钟
- 满分:100 分
- 题目来源:第三方来源(社区转写,非官方,仅供参考)
单项选择题
本分区标题为平台补的结构性占位,原卷(来源件)未收录。
一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)
在 C++ 中,下面哪个关键字用于声明一个变量, 其值不能被修改?
八进制数 123456708 和 076543218 的和为
阅读下述代码,请问修改 data 的 value 成员以存储 3.14,正确的方式是
union Data{
int num;
float value;
char symbol;
};
union Data data;
假设有一个链表的节点定义如下:
struct Node { int data; Node* next; }
现在有一个指向链表头部的指针:Node* head。如果想要在链表中插入一个新节点,其成员 data 的值为 42,并使新节点成为链表的第一个节点,下面哪个操作是正确的?
根节点的高度为 1,一棵拥有 2023个节点的三叉树高度至少为()。
小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息。则小明一共有()种选择时间段的方案。
以下关于高精度运算的说法错误的是()
后缀表达式 6 2 3 + - 3 8 2 / + * 2 ^ 3 + 对应的中缀表达式是
数 1010102 和 1668 的和为 ( )
假设有一组字符 {a,b,c,d,e,f}, 对应的频率分别为 5%,9%,12%,13%,16%,45%。请问以下哪个选项是字符abcdef分别对应的一组哈夫曼编码?
给定一棵二叉树,其前序遍历结果为:ABDECFG,中序遍历结果为:DEBACFG。请问这棵树的正确后序遍历结果是什么?
考虑一个有向无环图,该图包含 4 条有向边:(1,2),(1,3),(2,4) 和 (3,4)。以下哪个选项是这个有向无环图的一个有效的拓扑排序?
在计算机中,以下哪个选项描述的数据存储容量最小()
一个班级有 10 个男生和 12 个女生。如果要选出一个 3 人的小组,并且小组中必须至少包含 1 个女生,那么有多少种可能的组合?()
以下哪个不是操作系统?()
二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)
判断题「√」表示正确,「×」表示错误
整组作答后提交批改,成绩计入掌握度 · 已答 0/5
#include<iostream>2#include<cmath>3using namespace std;45double f(double a,double b,double c){6 double s=(a+b+c)/2;7 return sqrt(s*(s-a)*(s-b)*(s-c));8}9int main(){10 cout.flags(ios::fixed);11 cout.precision(4);12 13 int a,b,c;14 cin>>a>>b>>c;15 cout<<f(a,b,c)<<endl;16 return 0;17}- 16判断2 分
(2分)当输入为
2 2 2时,输出为1.7321( ) - 17判断2 分
(2分)将第7行中的
(s-b)*(s-c)改为(s-c)*(s-b)不会影响程序运行的结果( ) - 18判断2 分
(2分)程序总是输出四位小数( )
- 19单选3 分
单选题
- 当输入为
3 4 5时,输出为( )
- 当输入为
- 20单选3 分
当输入为
5 12 13时,输出为( )
整组作答后提交批改,成绩计入掌握度 · 已答 0/6
#include<iostream>2#include<vector>3#include<algorithm>4using namespace std;56int f(string x,string y){7 int m=x.size();8 int n=y.size();9 vector<vector<int>>v(m+1,vector<int>(n+1,0));10 for(int i=1;i<=m;i++){11 for(int j=1;j<=n;j++){12 if(x[i-1]==y[j-1]){13 v[i][j]=v[i-1][j-1]+1;14 }else{15 v[i][j]=max(v[i-1][j],v[i][j-1]);16 }17 }18 }19 return v[m][n];20}21bool g(string x,string y){22 if(x.size() != y.size()){23 return false;24 }25 return f(x+x,y)==y.size();26}27int main(){28 string x,y;29 cin>>x>>y;30 cout<<g(x,y)<<endl;31 return 0;32}- 21判断1.5 分
f函数的返回值小于等于 min{n,m}。() - 22判断1.5 分
f函数的返回值等于两个输入字符串的最长公共子串的长度。() - 23判断1.5 分
当输入两个完全相同的字符串时,
g函数的返回值总是true。() - 24单选3 分
单选题
- 将第19行中的
v[m][n]替换为v[n][m],那么该程序()。
- 将第19行中的
- 25单选3 分
当输入为
csp-j p-jcs时,输出为()。 - 26单选3 分
当输入为
csppsc spsccp时,输出为()。
整组作答后提交批改,成绩计入掌握度 · 已答 0/6
#include <iostream>2#include <cmath>3using namespace std;45int solve1(int n){6 return n*n;7}89int solve2(int n){10 int sum=0;11 for(int i=1;i<=sqrt(n);i++){12 if(n%i==0){13 if(n/i==i){14 sum+=i*i;15 }else{16 sum+=i*i+(n/i)*(n/i);17 }18 }19 }20 return sum;21}22int main(){23 int n;24 cin>>n;25 cout<<solve2(solve1(n))<<" "<<solve1((solve2(n)))<<endl;26 return 0;27}- 27判断1.5 分
如果输入的 n 为正整数,
solve2函数的作用是计算 n 所有的因子的平方和( ) - 28判断1.5 分
第 13∼14 行的作用是避免 n 的平方根因子 i(或 n/i )进入第 16 行而被计算两次( )
- 29判断1.5 分
如果输入的 n 为质数,
solve2(n)的返回值为 n2+1( ) - 30单选4 分
单选题
- (4分)如果输入的 n 为质数 p 的平方,那么
solve2(n)的返回值为( )
- (4分)如果输入的 n 为质数 p 的平方,那么
- 31单选3 分
当输入为正整数时,第一项减去第二项的差值一定( )
- 32单选3 分
当输入为
5时,输出为( )
三、完善程序(单选题,每小题 3 分,共计 30 分)
整组作答后提交批改,成绩计入掌握度 · 已答 0/5
- (寻找被移除的元素)问题: 原有长度为 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_number << endl;
}
return 0;
}
#include <iostream>2#include <vector>3using namespace std;4int find_missing(vector<int>& nums) {5 int left = 0, right = nums.size() - 1;6 while (left < right){7 int mid = left + (right - left) / 2;8 if (nums[mid] == mid + ①) {9 ②;10 } else {11 ③;12 }13 }14 return ④;15}16int main() {17 int n;18 cin >> n;19 vector<int> nums(n);20 for (int i = 0; i < n; i++) cin >> nums[i];21 int missing_number = find_missing(nums);22 if (missing_number == ⑤) {23 cout << "Sequence is consecutive" << endl;24 }else{25 cout << "Missing number is " << missing_number << endl;26 }27 return 0;28}- 33(①)单选空位 ①3 分
①处应填( )
- 34(②)单选空位 ②3 分
②处应填( )
- 35(③)单选空位 ③3 分
③处应填( )
- 36(④)单选空位 ④3 分
④处应填( )
- 37(⑤)单选空位 ⑤3 分
⑤处应填( )
整组作答后提交批改,成绩计入掌握度 · 已答 0/5
- (编辑距离)给定两个字符串,每次操作可以选择删除(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] = ①;
else if (j == 0)
dp[i][j] = ②;
else if (③)
dp[i][j] = ④;
else
dp[i][j] = 1 + min(dp[i][j - 1], dp[i - 1][j], ⑤);
}
}
return dp[m][n];
}
int main() {
string str1, str2;
cin >> str1 >> str2;
cout << "Minimum number of operations: " << edit_dist_dp(str1, str2) << endl;
return 0;
}
#include <iostream>2#include <string>3#include <vector>4using namespace std;5int min(int x, int y, int z) {6 return min(min(x, y), z);7}8int edit_dist_dp(string str1, string str2) {9 int m = str1.length();10 int n = str2.length();11 vector<vector<int>> dp(m + 1, vector<int>(n + 1));12 for (int i = 0; i <= m; i++) {13 for (int j = 0; j <= n; j++) {14 if (i == 0)15 dp[i][j] = ①;16 else if (j == 0)17 dp[i][j] = ②;18 else if (③)19 dp[i][j] = ④;20 else21 dp[i][j] = 1 + min(dp[i][j - 1], dp[i - 1][j], ⑤);22 }23 }24 return dp[m][n];25}26int main() {27 string str1, str2;28 cin >> str1 >> str2;29 cout << "Minimum number of operations: " << edit_dist_dp(str1, str2) << endl;30 return 0;31}- 38(①)单选空位 ①3 分
①处应填( )
- 39(②)单选空位 ②3 分
②处应填( )
- 40(③)单选空位 ③3 分
③处应填( )
- 41(④)单选空位 ④3 分
④处应填( )
- 42(⑤)单选空位 ⑤3 分
⑤处应填( )