2023年CSP-J 普及组第一轮题目和答案详解

news2025/2/24 11:26:40
家人们首战报捷!!!!
才教了一个月的学生,赛前一周才报名CSP-J都没提前安排初赛内容临时周内加了两节课,
总共初赛也就上了3次课准备了不到一周半,压线进了复赛,
不得不说学生基础还不错,脑子也转的快,接受程度嘎嘎强,茶馆也好喝家人们钱不钱无所谓主要是爱教课。
复赛加油冲了!

2023年CSP-J (题目和答案)

ps:详解之后更新

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

  1. 在C++中,下面哪个关键字用于声明一个变量,其值不能被修改?( )。
    A. unsigned
    B. const
    C. static
    D. mutable
    答案 B

  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. d a t a . v a l u e = 3.14 ; data.value = 3.14; data.value=3.14;
B. v a l u e . d a t a = 3.14 ; value.data = 3.14; value.data=3.14;
C. d a t a − > v a l u e = 3.14 ; data->value = 3.14; data>value=3.14;
D. v a l u e − > d a t a = 3.14 ; value->data = 3.14; value>data=3.14;
答案 A
4. 假设有一个链表的节点定义如下:

struct Node {
     int data;
     Node* next;
};

现在有一个指向链表头部的指针:Node* head。如果想要在链表中插入一个新节点,其成员data的值为42,并使新节点成为链表的第一个节点,下面哪个操作是正确的?( )
A. N o d e ∗ n e w N o d e = n e w N o d e ; n e w N o d e − > d a t a = 42 ; n e w N o d e − > n e x t = h e a d ; h e a d = n e w N o d e ; Node* newNode = new Node; newNode->data = 42; newNode->next = head; head = newNode; NodenewNode=newNode;newNode>data=42;newNode>next=head;head=newNode;
B. N o d e ∗ n e w N o d e = n e w N o d e ; h e a d − > d a t a = 42 ; n e w N o d e − > n e x t = h e a d ; h e a d = n e w N o d e ; Node* newNode = new Node; head->data = 42; newNode->next = head; head = newNode; NodenewNode=newNode;head>data=42;newNode>next=head;head=newNode;
C. N o d e ∗ n e w N o d e = n e w N o d e ; n e w N o d e − > d a t a = 42 ; h e a d − > n e x t = n e w N o d e ; Node* newNode = new Node; newNode->data = 42; head->next = newNode; NodenewNode=newNode;newNode>data=42;head>next=newNode;
D. N o d e ∗ n e w N o d e = n e w N o d e ; n e w N o d e − > d a t a = 42 ; n e w N o d e − > n e x t = h e a d ; Node* newNode = new Node; newNode->data = 42; newNode->next = head; NodenewNode=newNode;newNode>data=42;newNode>next=head;
答案 A
5. 根节点的高度为1,一根拥有2023个节点的三叉树高度至少为( )。
A. 6
B. 7
C. 8
D. 9
答案 C
6. 小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息,则小明一共有
( )种选择时间段的方案。
A. 31
B. 18
C. 21
D. 33
答案 B
7. 以下关于高精度运算的说法错误的是( )。
A. 高精度计算主要是用来处理大整数或需要保留多位小数的运算。
B. 大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数乘以某个数,通过减法得到新的被除数,并累加商。
C. 高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关。
D. 高精度加法运算的关键在于逐位相加并处理进位。
答案 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. 数 10101 0 ( 2 ) 101010_{(2)} 101010(2) 16 6 ( 8 ) 166_{(8)} 166(8)的和为( )。
A. 1011000 0 ( 2 ) 10110000_{(2)} 10110000(2)
B. 23 6 ( 8 ) 236_{(8)} 236(8)
C. 15 8 ( 10 ) 158_{(10)} 158(10)
D. A 0 ( 16 ) A0_{(16)} 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选项更正为:EDBGFCA
B选项更正为:EDGBFCA

答案 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

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

(1)

#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的正整数,完成下面的判断题和单选题:
判断题
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)

#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;
}

判断题
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)

#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的整数,完成下面的判断题和单选题。
判断题
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 的开序数组可能不再连续,除非被移除的是第一个或最后之个元素。需要在数组不连续时,找出被移除的元素。试补全程序。

#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;
}
  1. ①处应填( )
    A. 1 1 1 B. n u m s [ 0 ] nums[0] nums[0] C. r i g h t right right D. l e f t left left
    答案 B
  2. ②处应填( )
    A. l e f t = m i d + 1 left=mid+1 left=mid+1 B. r i g h t = m i d − 1 right=mid-1 right=mid1 C. r i g h t = m i d right=mid right=mid D. l e f t = m i d left=mid left=mid
    答案 A
  3. ③处应填( )
    A. l e f t = m i d + 1 left=mid+1 left=mid+1 B. r i g h t = m i d − 1 right=mid-1 right=mid1 C. r i g h t = m i d right=mid right=mid D. l e f t = m i d left=mid left=mid
    答案 C
  4. ④处应填( )
    A. l e f t + n u m s [ 0 ] left+nums[0] left+nums[0] B. r i g h t + n u m s [ 0 ] right+nums[0] right+nums[0] C. m i d + n u m s [ 0 ] mid+nums[0] mid+nums[0] D. r i g h t + 1 right+1 right+1
    答案 A
  5. ⑤处应填( )
    A. n u m s [ 0 ] + n nums[0]+n nums[0]+n B. n u m s [ 0 ] + n − 1 nums[0]+n-1 nums[0]+n1 C. n u m s [ 0 ] + n + 1 nums[0]+n+1 nums[0]+n+1 D. n u m s [ n − 1 ] nums[n-1] nums[n1]
    答案 D

(2) (编辑距离)给定两个字符串,每次操作可以选择删除(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 << "Mininum number of operation:" << edit_dist_dp(str1, str2) << endl;
    return 0;
}
  1. ①处应填( )
    A. j j j B. i i i C. m m m D. n n n
    答案 A
  2. ②处应填( )
    A. j j j B. i i i C. m m m D. n n n
    答案 B
  3. ③处应填( )
    A. s t r 1 [ i − 1 ] = = s t r 2 [ j − 1 ] str1[i-1]==str2[j-1] str1[i1]==str2[j1] B. s t r 1 [ i ] = = s t r 2 [ j ] str1[i]==str2[j] str1[i]==str2[j]
    C. s t r 1 [ i − 1 ] ! = s t r 2 [ j − 1 ] str1[i-1]!=str2[j-1] str1[i1]!=str2[j1] D. s t r 1 [ i ] ! = s t r 2 [ j ] str1[i]!=str2[j] str1[i]!=str2[j]
    答案 A
  4. ④处应填( )
    A. d p [ i − 1 ] [ j − 1 ] + 1 dp[i-1][j-1]+1 dp[i1][j1]+1 B. d p [ i − 1 ] [ j − 1 ] dp[i-1][j-1] dp[i1][j1]
    C. d p [ i − 1 ] [ j ] dp[i-1][j] dp[i1][j] D. d p [ i ] [ j − 1 ] dp[i][j-1] dp[i][j1]
    答案 B
  5. ⑤处应填( )
    A. d p [ i ] [ j ] + 1 dp[i][j] + 1 dp[i][j]+1 B. d p [ i − 1 ] [ j − 1 ] + 1 dp[i-1][j-1]+1 dp[i1][j1]+1
    C. d p [ i − 1 ] [ j − 1 ] dp[i-1][j-1] dp[i1][j1] D. d p [ i ] [ j ] dp[i][j] dp[i][j]
    答案 C

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

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

相关文章

Python是人工智能的最佳选择吗?看看它的优势和局限

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是当今科技领域最热门的话题之一&#xff0c;它涉及到计算机科学、数学、统计学、心理学等多个学科的交叉和融合。人工智能的目标是让机器能够模拟和超越人类的智能&#xff0c;实现自主学习、推理、决策…

Kotlin协程CoroutineScope异步async取消cancel等待await的任务

Kotlin协程CoroutineScope异步async取消cancel等待await的任务 import kotlinx.coroutines.*fun main(args: Array<String>) {runBlocking {val mScope CoroutineScope(Dispatchers.IO).async {println("->")delay(999999)println("<-")"…

施耐德电气携中国信通院和中国联通共同发布白皮书,共探5G+PLC深度融合应用

2023年9月20日——全球能源管理和自动化领域的数字化转型专家施耐德电气在第23届中国国际工业博览会首日的9月19日&#xff0c;与中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;及中国联合网络通信集团有限公司&#xff08;以下简称“中国联通”&#xff0…

配置 iSCSI 服务并实现客户端自动挂载块设备

文章目录 前言1. iSCSI 简介2. iSCSI Server 端配置2.1. 添加磁盘2.2. 安装 targetcli 软件包2.3. 创建块设备2.4. 创建 Target2.5. 创建 LUN2.6. 创建 ACL2.7. 配置门户创建监听2.8. 查看全部配置信息并保存退出2.9. 启用 Target 服务 3. iSCSI Client 端配置3.1. 安装 iscsi-…

前端框架vBean admin

文章目录 引言I 数据库表设计1.1 用户表1.2 角色表1.3 菜单表II 接口引言 文档:https://doc.vvbin.cn/guide/introduction.html http://doc.vvbin.cn 仓库:https://github.com/vbenjs/vue-vben-admin git clone https://github.com/vbenjs/vue-vben-admin-doc 在线体验demo:…

台积电没有想到,当初拒绝的中国芯片企业,如今反过来抢夺市场了,后悔莫及...

台积电二季度的营收已经出现下滑&#xff0c;本来它希望四季度在以往苹果销售旺季的支持下再度推高收入&#xff0c;然而如今中国手机企业自研的国产5G芯片正在反过来抢占市场&#xff0c;台积电四季度的收入恐怕也将下降。 苹果的销售旺季为每年的四季度&#xff0c;不过此时恰…

通过已有虚拟机快照创建虚拟机

我们在搭建redis、k8s等集群的时候&#xff0c;需要创建多台虚拟机&#xff0c;而且这几台虚拟机的配置基本上是一样的&#xff0c;这种情况下我们可以先创建一台虚拟机&#xff0c;安装需要的应用后导出快照&#xff0c;然后通过快照生成其他的虚拟机 1、生成快照 2、通过快照…

用小程序,轻松识别纸质表格并转换成Excel表格,解放双手

来百度APP 职场小伙伴们&#xff0c;有没有遇到过将纸质表格转化为Excel表格的任务&#xff1f;如果你没有经验&#xff0c;手工处理不仅效率低&#xff0c;而且容易出错。这真是一个费时费力的任务呀&#xff01;但别担心&#xff0c;现在我们有更好的解决方案——百度小程序…

neo4j下载安装配置步骤

目录 一、介绍 简介 Neo4j和JDK版本对应 二、下载 官网下载 直接获取 三、解压缩安装 四、配置环境变量 五、启动测试 一、介绍 简介 Neo4j是一款高性能的图数据库&#xff0c;专门用于存储和处理图形数据。它采用节点、关系和属性的图形结构&#xff0c;非常适用于…

大模型训练之加速篇 -attention优化【MQA-> flashAttention】

MQA (multi query attention) Fast Transformer Decoding: One Write-Head is All You Need MQA 是 19 年提出的一种新的 Attention 机制&#xff0c;其能够在保证模型效果的同时加快 decoder 生成 token 的速度。 那到底能提升多少的速度呢&#xff0c;我们来看论文中给出的结…

慢SQL原因分析之索引失效 | 京东物流技术团队

现象 最近收到一个慢sql工单,慢sql大概是这样&#xff1a;“select xxx from tabel where type 1”。 咦&#xff0c;type字段明明有索引啊&#xff0c;为啥是慢sql呢&#xff1f; 原因 通过执行explain&#xff0c;发现实际上数据库执行了全表扫描&#xff0c;从而被系统…

excel的vlookup函数用法

vlookup函数功能&#xff1a;在表格的首列查找指定的数值&#xff0c;并返回表格当前行中指定列处的数值。 结构&#xff1a;VLOOKUP(查找值,查找区域,列序数,匹配条件) 解释&#xff1a;VLOOKUP(找谁,在哪里找,第几列,0或1) 说明&#xff1a; 1、第一参数&#xff1a;查找…

【Linux is not Unix】Linux前言

目录 二战军工的产物——第一台现代电子数字计算机ENIAC&#xff08;埃尼阿克&#xff09; Unix Linux Linux企业应用现状 如今计算机已经应用在我们生活的各个层面&#xff0c;像我们日常使用的笔记本是计算机的一类&#xff0c;可以解决我们生活中遇到的很多问题&#xff…

【数据分享】2023年全国乡镇(街道)点位数据(免费获取\shp格式\excel格式)

乡镇&#xff08;街道&#xff09;点位数据是我们各项研究中经常使用到的数据&#xff0c;在之前的文章中我们分享过2022年度的乡镇&#xff08;街道&#xff09;点位数据&#xff08;可查看之前推送的文章获悉详情&#xff09;。本次我们带来的是2023年度的全国范围的乡镇&…

Labelme分割标注软件

Labelme分割标注软件 1、环境配置与安装1.1 创建conda虚拟环境(建议)1.2 安装Labelme 2、简单使用2.1 创建label标签文件2.2 启动labelme2.3 打开文件/文件夹2.4 设置保存结果路径2.5 标注目标2.6 保存json文件格式 3 格式转换3.1 转换语义分割标签3.2 转换实例分割标签 相关重…

CUDA小白 - NPP(11) 图像处理 Comparison Operations

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

显示器有白点闪烁、间歇黑屏解决办法

问题描述 以上三张图片是不到一秒内通过手机视频拍摄显示器画面&#xff0c;可以看到第一张图大桥下和第二张图片右下角岛屿初均有红点闪烁。当触发黑屏时&#xff0c;显示器整体白点闪烁。并且时常黑屏&#xff0c;几秒后恢复。 解决办法 检查HDMI连接线是否脱落&#xff0c…

初识canvas

对于一个前端人员来说&#xff0c;canvas是必须掌握的技能之一。如果你想像画画一样在浏览器上作画&#xff0c;那么canvas就可以做你的画布。 接下啦我们就以画画的标准来初步认识下canvas 1.画布 画画的第一步你得有一张画纸或者画布&#xff0c;canvas标签就是我们的画布…

查看mysql 容量

SQL SELECT table_schema "database", sum( data_length index_length) / 1024 / 1024 /1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;结果

CSS 之 grid 网格布局

一、简介 ​ display: grid;用于设置元素内部的布局类型为网格布局&#xff0c;其外显类型为块级元素。该类型的元素将内部分为行和列&#xff0c;划分成一个个单元格&#xff0c;并通过一系列相关属性控制单元格及其内容的布局和大小。 ​ 该属性值的主要应用场景为&#xf…