2023年CSP-J第一轮题目讲解

news2024/11/15 19:47:32

大家好,我是极风。由于当年的初赛考的很差(没考过70分),所以现在打算拿出来再细看一下。

一、  单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

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

A.  unsigned 

B.  const 

C.  static 

D.  mutable

答案 B

对于这几个选项,其意义如下:

unsigned无符号

const常量

static(static_cast)强制转换表达式类型

mutable可变量

2.  八进制数123456708 和076543218的和为( )。

A.  222222218

B.  211111118

C.  221111118

D.  222222118

答案 D

本题为计算题,不再概述。

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;

答案 A

访问union的成员变量时,应该要用.来连接。

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;

答案 A

链表操作的基础题。我们可以使用排除法,排除BCD,故选A。

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

A.  6

B.  7

C.  8

D.  9

答案 C

重点:这是一棵三叉树,而不是二叉树。那么二叉树层数的计算公式2^n-1就要改为3^n-1。经过从小往大计算,n为7时成立。故选B。

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

( )种选择时间段的方案。

A.  31

B.  18

C.  21

D.  33

答案 B

暴力枚举的题目。我们可以分成三类:一个空闲时间段,两个空闲时间段,三个空闲时间段。经过计算,这三类的种类分别是:7、10、1,故选B。

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

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

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

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

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

答案 C

本题考查高精度计算的基础知识,错误为C。应改为:高精度乘法的运算时间与参与运算的两个数有关。

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

答案 A

本题建议一个一个选项地展开后缀表达式,这样子计算量会小一些。

9.  数101010(2)和166(8)的和为( )。

A.  10110000(2)

B.  236(8)

C.  158(10)

D.  A0(16)

答案 D

暴力计算,不再概述。

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

答案 A

哈夫曼编码是我的弱项,在此先不做讲解。

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

A.  EDBFGCA

B.  EDBGCFA

C.  DEBGFCA

D.  DBEGFCA

答案 A

暴力计算题目,不再概述。

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

答案 B

拓扑是高中的,还不太懂。。。

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

A.  字节(byte)

B.  比特(bit)

C.  字(word)

D.  千字节(kilobyte)

答案 B

计算机常识问题,不再概述。

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

A.  1420

B.  1770

C.  1540

D.  2200

答案 A

分类讨论:小组里有一个女生、小组里有两个女生、小组里有三个女生。

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

A.  Linux

B.  Windows

C.  Android

D.  HTML

答案 D

HTML是一种语言。

二、  阅读程序(程序输入不超过数组成字符串定义的范围:判断题正确填√,错误填×;除特殊说明外,判断题1.5分,选择题3分,共计40分)

(1)

01 #include<iostream>02 #include<cmath>03 using namespace std;04 05 double f(double a,double b,double c){06     double s=(a+b+c)/2;07     return sqrt(s*(s-a)*(s-b)*(s-c));08 }0910 int main(){11    cout.flags(ios::fixed);12    cout.precision(4);13    14     int a,b,c;15    cin>>a>>b>>c;16    cout<<f(a,b,c)<<endl;17    return 0;18 }

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

判断题

16.  (2分)当输入为“2 2 2”时,输出为“1.7321”( )

答案 正确

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

答案 正确

18. (2分)程序总是输出四位小数( )

答案 正确

单选题

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

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

答案 A

20.  当输入为“5 12 13”时,输出为( )

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

答案 B

(2)

​​​​​​​

01 #include<iostream>02 #include<vector>03 #include<algorithm>04 using namespace std;05 06 int f(string x,string y){07     int m=x.size();08     int n=y.size();09     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 }2122 bool g(string x,string y){23     if(x.size() != y.size()){24         return false;25     }26     return f(x+x,y)==y.size();27 }2829 int main(){30     string x,y;31     cin>>x>>y;32     cout<<g(x,y)<<endl;33     return 0;34 }

判断题

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

答案 正确

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

答案 错误

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

答案 正确

单选题

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

A. 行为不变       B. 只会改变输出   C..一定非正常退出 D. 可能非正常退出

答案 D

25.  当输入为 "csp-j p-jcs" 时,输出为( )

A. “0”         8. “1”              C  “T”              D. “F”

答案 B

26 当输入为“csppsc spsccp”时,输出为:( )

A. “T”          B. “F”        c. “0”         0. “1”

答案 D

(3)

01 #include <iostream>02 #include <cmath>03 using namespace std;04 05 int solve1(int n){06     return n*n;07 }0809 int 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 }2223 int main(){24     int n;25     cin>>n;26     cout<<solve2(solve1(n))<<" "<<solve1((solve2(n)))<<endl;27     return 0;28 }

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

判断题

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

答案 正确

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

答案 正确

29.  如果输入的n为质数,solve2(n)的返回值为n²+1( )

答案 正确

单选题

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

A.  p²+p+1 B. n²+n+1 C. n²+1 D. p4+2p²+1

答案 B

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

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

答案 D

32.  当输入为“5”时,输出为( )

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

答案 C

三、完善程序(单选题,每小题3分,共计 3 分)

(1)(寻找被移除的元素)问题:原有长度为 n+1公差为1等升数列,将数列输到程序的数组时移除了一个元素,导致长度为 n 的开序数组可能不再连续,除非被移除的是第一个或最后之个元素。需要在数组不连续时,找出被移除的元素。试补全程序。

01 #include <iostream02 #include <vector>0304 using namespace std;0506 int find missing(vector<int>& nums) (07 int left = 0, right = nums.size() - 1;08while (left < right){09   int mid = left + (right  left) / 2;10   if (nums[mid] - mid+ ①) (11        ②;12    }else{13      ③14    }15   }16  return ④;17 }1819 int main() (20    int n;21 cin >> n;22 vector<int> nums(n);23 for (int i= 0; i< n; i++) cin >> nums[i];24 int missing_number = find_missing(nums);25 if_(missing_number == ⑤) {26     cout << "Sequence is consecutive" << endl;27 }else{28    cout << "Missing number is " << ,missing numbeer << endl;29 }30 return 0;31 }

33.  ①处应填( )

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

答案 B

34.  ②处应填( )

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

答案 A

35.  ③处应填( )

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

答案 C

36.  ④处应填( )

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

答案 A

37.  ⑤处应填( )

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

答案 D

(2)  (编辑距离)给定两个字符串,每次操作可以选择删除(Delete)、插入(Insert)、替换(Replace),一个字符,求将第一个字符串转换为第二个字符串所需要的最少操作次数。

1.#include <iostream>
2.#include <string>
3.#include <vector>
4.using namespace std;
5. 
6.int min(int x,int y,int z){
7. return min(min(x,y),z);
8.}
9. 
10.int edit_dist_dp(string str1,string str2){
11. int m=str1.length();
12. int n=str2.length();
13. vector<vector<int>> dp(m+1,vector<int>(n+1));
14. 
15. for(int i=0;i<=m;i++){
16. for(int j=0;j<=n;j++){
17. if(i==0)
18. dp[i][j]=(1);
19. else if(j==0)
20. dp[i][j]=(2);
21. else if((3))
22. dp[i][j]=(4);
23. else
24. dp[i][j]=1+min(dp[i][j-1],dp[i-1][j],(5)); 
25. }
26. }
27. return dp[m][n];
28.}
29. 
30.int main(){
31. string str1,str2;
32. cin>>str1>>str2;
33. cout<<"Mininum number of operation:"
34. <<edit_dist_dp(str1,str2)<<endl;
35. return 0; 
36.}

38.  ①处应填( )

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

答案 A

39.  ②处应填( )

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

答案 B

40.  ③处应填( )

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

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

答案 A

41.  ④处应填( )

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

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

答案 B

42.  ⑤处应填( )

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

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

答案 C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1568468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【mT5模型】mT5: A Massively Multilingual Pre-trained Text-to-Text Transformer

【mT5模型】mT5: A Massively Multilingual Pre-trained Text-to-Text Transformer 论文信息 阅读评价 Abstract Introduction Background on T5 and C4 mC4 and mT5 mC4 mT5 Comparison to related models Experiments Zero-shot generation Illegal predictions Pre…

Plonky2.5:在Plonky2中验证Plonky3 proof

1. 引言 Plonky2.5为QED Protocol团队主导的项目&#xff0c;定位为&#xff1a; 在Plonky2 SNARK中验证Plonky3 STARK proof。 从而实现Plonky系列的递归证明。 开源代码实现见&#xff1a; https://github.com/QEDProtocol/plonky2.5https://github.com/Plonky3/Plonky3&a…

CSGO比赛赛事大科普,Major并不是一个赛事!

关于CSGO比赛&#xff0c;有很多人都听过许多相关名词&#xff1a;Major、Minor、IEM、EPL、ESL ONE、Dreamhack、ESEA、Blast、EPICENTER等等&#xff0c;但大家有没有想过这些名词所代表的含义呢&#xff1f; Major、Minor严格意义上说&#xff0c;Major、Minor本身并不是赛事…

Prometheus+grafana环境搭建方法及流程两种方式(docker和源码包)(一)

1.选型对比 最近项目上有对项目服务及中间件的监控需求&#xff0c;要做实现方案调研&#xff0c;总结一下自己的成果&#xff0c;目前业界主流可选的方案有&#xff1a; 国外开源&#xff1a; Prometheus&#xff1a;Prometheus - Monitoring system & time series dat…

python ---- %r %s格式输出的区别

在python中&#xff0c; % s和 % r是我们常用的格式符&#xff0c;它们的用法基本一致&#xff0c;但作用却不尽相同&#xff0c;下面简要说明一下两者的区别&#xff1a; 1. % s是将对象 / 变量传递到str()方法中&#xff0c;并将其转化为面向用户的可阅读的格式。 2. % r是将…

【竞技宝jjb.lol】LOL:WBG拒绝让二追三击败LNG晋级第三轮

北京时间2024年4月4日,英雄联盟LPL2024春季季后赛继续进行,昨天迎来次轮LNG对阵WBG。本场比赛WBG气势如虹的二连胜后被LNG连追两局,最后一局scout的小炮连续失误葬送局势,最终WBG3-2力克LNG晋级第三轮。以下是本场比赛的详细战报。 第一局: 首局比赛,LNG在蓝色方,WBG在红色方。…

Python基础之pandas:字符串操作与透视表

文章目录 一、字符串操作备注&#xff1a;如果想要全部行都能输出&#xff0c;可输入如下代码 1、字符检索2、字符转换3、字符类型判断4、字符调整5、字符对齐与填充6、字符检索7、字符切割8、字符整理 二、透视表1、pd.pivot_table2、多级透视表 一、字符串操作 备注&#xf…

【Python系列】Python中的YAML数据读取与解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

JavaSE——运算符

1. 概念 运算符是一种用于执行特定操作的符号或关键字。在编程中&#xff0c;运算符用于对变量、常量和表达式进行操作&#xff0c;以产生一个结果。 作为一门计算机语言&#xff0c; Java 也提供了一套丰富的运算符来操纵变量。 Java 中运算符可分为以下&#xff1a;算术运算…

前端订阅后端推送WebSocket定时任务

0.需求 后端定时向前端看板推送数据&#xff0c;每10秒或者30秒推送一次。 1.前言知识 HTTP协议是一个应用层协议&#xff0c;它的特点是无状态、无连接和单向的。在HTTP协议中&#xff0c;客户端发起请求&#xff0c;服务器则对请求进行响应。这种请求-响应的模式意味着服务器…

Waifu2x:使用深度卷积神经网络的动漫风格艺术的图像超分辨率

Github网址&#xff1a;nagadomi/waifu2x&#xff1a;动漫风格艺术的图像超分辨率 (github.com) 该项目主要讲述的是如何利用预训练的深度学习模型来达到无损扩大收缩和去噪&#xff0c;对于一般训练图像的小伙伴应该很清晰图像经常要通过resize操作固定大小&#xff0c;然后c…

Docker,anaconda环境的部署与迁移

功能上线将提上日程&#xff0c;但是如何将我windows环境下的程序放到linux服务器的测试环境跑通呢&#xff1f;这是我这整个清明假期将要解决的一件事&#xff0c;最蠢的办法就是看自己的环境下有哪些依赖&#xff0c;如何到服务器上一个一个下&#xff0c;但是首先这个方法很…

C#,简单,精巧,实用的按类型删除指定文件的工具软件

点击下载本文软件&#xff08;积分&#xff09;&#xff1a; https://download.csdn.net/download/beijinghorn/89059141https://download.csdn.net/download/beijinghorn/89059141 下载审核通过之前&#xff0c;请从百度网盘下载&#xff08;无积分&#xff09;&#xff1a;…

Flume进阶学习!

本文图片来自于8.flume实时监控文件hdfs sink使用演示_哔哩哔哩_bilibili Apache Flume 的启动过程及其配置文件和脚本 在官网下载的Flume的压缩包中&#xff0c;.lib文件有大量的jar包&#xff0c;按道理说只有.lib文件就可以运行Flume程序了。只不过需要java -jar命令还要加…

二维码:技术、商业与未来

title: 二维码&#xff1a;技术、商业与未来 date: 2024/4/3 19:12:28 updated: 2024/4/3 19:12:28 tags: 二维码技术商业应用移动支付物联网AR/VR融合智能家居数字化社会 第一章&#xff1a;引言 1. 二维码在数字化时代的重要性和普及程度 在数字化时代&#xff0c;二维码作…

【吊打面试官系列】Redis篇 -使用过 Redis 做异步队列么,你是怎么用的?

大家好&#xff0c;我是锋哥。今天分享关于 【使用过 Redis 做异步队列么&#xff0c;你是怎么用的&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 使用过 Redis 做异步队列么&#xff0c;你是怎么用的&#xff1f; 一般使用 list 结构作为队列&#xff0c;rpu…

31. UE5 RPG使用增强输入激活GameplayAbility(一)

在前面文章中&#xff0c;我们实现了对技能添加并直接激活功能&#xff0c;介绍了GA的相关参数配置。现在&#xff0c;我们还不能通过键位触发技能&#xff0c;正常在游戏时&#xff0c;我们需要通过键位触发技能&#xff0c;实现技能的激活。 在UE5里面添加了增强输入&#xf…

简历复印--原型模式

1.1 夸张的简历 简历的打印。"对编程来说&#xff0c;简单的复制粘贴极有可能造成重复代码的灾难。我所说的意思你根本还没听懂。那就以刚才的例子&#xff0c;我出个需求你写写看&#xff0c;要求有一个简历类&#xff0c;必须要有姓名&#xff0c;可以设置性别和年龄&am…

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…

root@localhost‘s password: Permission denied, please try again.

编辑、etc/ssh/sshd_config文件 ,将PermitRootLogin这行改为yes rootubuntu:/home/ubuntu# vim /etc/ssh/sshd_config 重新加载改文件 /etc/init.d/ssh restart