2023-09-16 CSP-J 第一轮初赛真题解析

news2024/11/25 6:44:33

分数:100

考试时间:120分钟

一、  单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)
1.在 C++中,下面哪个关键字用于声明一个变量,其值不能被修改?(B)(2分)
A. unsigned
B. const
C. static
D. mutable

2.八进制数12345670₈和07654321₈的和为(D)。(2分)
A. 22222221₈
B. 21111111₈
C. 22111111₈
D. 22222211₈

3.读下述代码,请问修改 data 的value 成员以存储3.14,正确的方式是(D)。(2分)

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)
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)。(2分)
A.6
B.7
C.8
D.9

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

7.以下关于高精度运算的说法错误的是(C)。(2分)
A. 高精度计算主要是用来处理大整数或需要保留多位小数的运算
B. 大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数乘以某个数,通过减法得到新的被除数,并累加商。
C. 高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关。
D. 高精度加法运算的关键在于逐位相加并处理进位。

8.后缀表达式“6 2 3 + - 3 8 2 / + * 2 ^ 3 +”对应的中表达式是(A)。(2分)
A. ((6 - (2 + 3))*(3 + 8 / 2)) ^ 2 
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₂和166₈的和为(D)。(2分)
A.10110000₂
B.236₈
C.158₁₀
D.A0₁₆

10.假设有一组字符{a, b, c, d, e, f},对应的频率分别为5%, 9%, 12%, 13%,16%,45%。请问以下哪个选项是字符a, b, c, d, e, f分别对应的一组哈夫曼编码?(A)(2分)
A. 1111, 1110, 101, 100, 110, 0
B. 1011, 1001, 1000, 011, 010, 100
C. 000, 001, 010, 011, 10, 11
D. 1010, 1011, 110, 111, 00, 01

11.给定一颗二叉树,其前序遍历结果为:ABCDEFG,中序遍历结果为:DEBACFG。请问这棵树的正确遍历结果是什么?(A)(2分)
A. EDBFGCA
B. EDBGCFA
C. DEBGFCA
D. DBEGFCA

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


A. 4, 2, 3, 1
B. 1, 2, 3, 4
C. 1, 2, 4, 3
D. 2, 1, 3, 4

13.在计算机中,以下哪个选项描述的数据存储容量最小?(B)(2分)
A. 字节(byte)
B. 比特(bit)
C. 字(word)
D. 千字节(kilobyte)

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

15.以下哪个不是操作系统?(D)(2分)
A. Linux
B. Windows
C. Android
D. HTML

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

#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”时,输出为“1.7321”(对 )(2分)
17. 将第7行中的"(s-b)*(s-c)"改为"(s-c)*(s-b)"不会影响程序运行的结果( 对)(2分)
18. 程序总是输出四位小数(对 )(2分)
·单选题
19. 当输入为“3 4 5”时,输出为( A)(3分)
A. "6.0000" 
B. "12.0000" 
C. "24.0000" 
D. "30.0000"

20. 当输入为“5 12 13”时,输出为( B)(3分)
A. "24.0000"
B. "30.0000"
C. "60.0000"
D. "120.0000"

#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)。(对 )(1.5分)
22. f函数的返回值等于两个输入字符串的最长公共子串的长度。( 错)(1.5分)
23. 当输入两个完全相同的字符串时,g函数的返回值总是true( 对)(1.5分)
·单选题
24. 将第19行中的“v[m][n]”替换为“v[n][m]”,那么该程序(B )(3分)
A. 行为不变
B. 只会改变输出
C. 一定非正常退出
D. 可能非正常退出
25. 当输入为“csppsc spsccp”时,输出为:(B )(3分)
A. "0"
B. "1"
C. "T"
D. "F"
26. 当输入为 “csppsc spsccp”时,输出为(D)。(3分)
A. "T"
B. "F"
C. "0"
D. "1"

#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所有的因子的平方和(对 )(1.5分)
28. 第13~14行的作用是避免n的平方根因子i(或n/i)进入第16行而被计算两次(对 )(1.5分)
29. 如果输入的n为质数,solve2(n)的返回值为n2+1(对 )(1.5分)
·单选题
30. 如果输入的n为质数p的平方,那么solve2(n)的返回值为( B)  (4分)
A. p2+p+1 
B. n2+n+1 
C. n2+1 
D. p4+2p2+1
31.  当输入为正整数时,第一项减去第二项的差值一定( D)(3分)
A.  大于0 B. 大于等于0且不一定大于0 C. 小于0 D. 小于等于0且不一定小于0
32.  当输入为“5”时,输出为(C )(3分)
A. "651.625" 
B. "650.729" 
C. "651.676" 
D. "652.625"

三、完善程序(单选题,每小题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 numbeer << endl;
    }
    return 0;
}

 
33. ①处应填( B)(3分)
A. 1 
B. nums[0] 
C. right 
D. left

34. ②处应填(A )(3分)
A. left=mid+1 
B. right=mid-1 
C. right=mid 
D. left=mid

35. ③处应填(C )(3分)
A.left=mid+1 
B.right=mid-1 
C.right=mid 
D.left=mid

36. ④处应填(A )(3分)
A.left+nums[0] 
B.right+nums[0] 
C.mid+nums[0] 
D.right+1

37. ⑤处应填( D)(3分)
A.nums[0]+n 
B.nums[0]+n-1 
C.nums[0]+n+1 
D.nums[n-1]

(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]=(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; 
}

38. ①处应填( A)(3分)
A. j 
B. i 
C. m 
D. n

39. ②处应填(B )(3分)
A. j 
B. i 
C. m 
D. n
 
40. ③处应填(A )(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]

41. ④处应填(B )(3分)
A. dp[i-1][j-1]+1 
B. dp[i-1][j-1]
C. dp[i-1][j] 
D. dp[i][j-1]

42. ⑤处应填( C)(3分)
A. dp[i][j] + 1 
B. dp[i-1][j-1]+1
C. dp[i-1][j-1] 
D. dp[i][j]

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

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

相关文章

JavaWeb基础学习(5)

JavaWeb基础学习 一、Filter1.1 Filter介绍1.2 Filter快速入门1.3、Filter执行流程1.4、Filter使用细节1.5、Filter-案例-登陆验证 二、Listener2.1 Listener介绍2.2、ServletContextListener使用 三、AJAX3.1 AJAX介绍与概念3.2 AJAX快速入门3.3 Axios异步架构3.4 JSON-概述和…

基于Yolov8网络进行目标检测(三)-训练自己的数据集

前一篇文章详细了讲解了如何构造自己的数据集&#xff0c;以及如何修改模型配置文件和数据集配置文件&#xff0c;本篇主要是如何训练自己的数据集&#xff0c;并且如何验证。 VOC2012数据集下载地址&#xff1a; http://host.robots.ox.ac.uk/pascal/VOC/voc2012/ coco全量数据…

推荐书目:Python从入门到精通(文末送书)

目录 编辑推荐 内容简介 作者简介 前言/序言 本书特点 编辑推荐 “软件开发视频大讲堂”丛书是清华社计算机专业基础类零售图书畅销品牌之一。 &#xff08;1&#xff09;2008—2023年&#xff0c;丛书累计修订7次&#xff0c;销售400万册&#xff0c;深受广大程序员喜爱。…

Vulnhub系列靶机---The Planets: Earth(行星-地球)

文章目录 信息收集主机发现端口扫描目录扫描dirsearch 漏洞利用反弹shellnc文件传输strace调试工具 靶机文档&#xff1a;The Planets: Earth 下载地址&#xff1a;Download (Mirror) 难易程度&#xff1a;Easy 信息收集 主机发现 端口扫描 80端口 需要做映射/etc/hosts https…

【算法|虚拟头节点|链表】移除链表元素

Leetcode203 移除链表元素 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xf…

Python入门教学——类和对象

目录 一、面向过程和面向对象 1、面向过程 2、面向对象 二、类 三、类对象与类属性 1、类对象 2、类属性 四、类方法与静态方法 1、类方法 2、静态方法 一、面向过程和面向对象 1、面向过程 是一种以过程为中心的编程思想&#xff0c;强调事件的流程和顺序。思想&…

驱动开发,IO模型,信号驱动IO实现过程

1.信号驱动IO框架图 分析&#xff1a; 信号驱动IO是一种异步IO方式。linux预留了一个信号SIGIO用于进行信号驱动IO。进程主程序注册一个SIGIO信号的信号处理函数&#xff0c;当硬件数据准备就绪后会发起一个硬件中断&#xff0c;在中断的处理函数中向当前进程发送一个SIGIO信号…

高内聚低耦合

低耦合 元素(方法、类)与元素依赖度不要太高&#xff1b;我们在设计程序时应该降低元素与元素之间的直接关系&#xff1b;降低元素与元素之间的耦合性&#xff1b; 若当前有方法A与方法B&#xff0c;A依赖与B&#xff0c;当B不存在的时候A就不能正常工作&#xff0c;那么就说…

高可用集群HA、LVS+Keepalived、健康检测

keepalived是集群管理中保证集群高可用(HA)的一个服务软件&#xff0c;其功能类似于heartbeat&#xff0c;用来防止单点故障。 2.工作原理 keepalived是以VRRP协议为实现基础的,当backup收不到vrrp包时就认为master宕掉了&#xff0c;这时就需要根据VRRP的优先级来选举一个ba…

机器学习笔记之无约束优化问题——(阶段性收尾)共轭方向法与Wolfe准则优化方法Python示例

机器学习笔记之无约束优化问题——基于共轭方向法与Wolfe准则优化方法的Python示例 引言小插曲&#xff1a;画图——非标准二次型的等值线算法在图像中的表示基于精确搜索的共轭梯度法基于Wolfe准则的共轭梯度法 附&#xff1a;共轭梯度法完整代码 引言 本节使用 Python \text…

SQL优化--分组优化(group by)

分组操作&#xff0c;我们主要来看看索引对于分组操作的影响。 在没有索引的情况下&#xff0c;执行如下SQL&#xff0c;查询执行计划&#xff1a; explain select profession , count(*) from tb_user group by profession ;然后&#xff0c;我们在针对于 profession &#…

Linux 上的 Wayland 是什么?它与 X 有何不同?

导读Wayland 是 Linux 发行版的替代窗口系统。它取代了老化的 X11 标准。由于它需要修改应用程序才能使用它&#xff0c;因此迄今为止采用速度很慢。在撰写本文时&#xff0c;增强的安全性是相对于 X11 的主要优势。 X11 或 X Window 系统可让您的图形桌面环境显示和控制窗口。…

【C语言】指针的进阶(一)

目录 前言 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 前言 指针在C语言中可谓是有着举足轻重的…

MySQL夺命20连问

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Seata 源码篇之核心思想 - 01

Seata 源码篇之核心思想 - 01 引言基础架构数据源代理分支事务提交和回滚隔离级别解决脏写读未提交读已提交 小结 笔者个人项目中使用到了seata来做分布式事务管理&#xff0c;面试过程中也经常被问到seata的原理&#xff0c;seata源码本身也不是很复杂&#xff0c;所以准备出一…

FWT小结

核心思想&#xff1a;把 a , b a,b a,b 化成 f w t ( a ) , f w t ( b ) fwt(a),fwt(b) fwt(a),fwt(b)&#xff0c;相乘后再化为 a a a 化的过程用的是分治 所以和FFT其实一模一样 OR / AND 卷积 不需要什么技巧&#xff0c;暴力分治转移即可 每次分治下去&#xff0c;…

瑞萨MCU入门教程(非常详细的瑞萨单片机入门教程)

瑞萨MCU零基础入门系列教程 前言 得益于瑞萨强大的MCU、强大的软件开发工具(e studio)&#xff0c;也得益于瑞萨和RA生态工作室提供的支持&#xff0c;我们团队编写了《ARM嵌入式系统中面向对象的模块编程方法》&#xff0c;全书37章&#xff0c;将近500页: 讲解面向对象编程…

硬件笔记:组装“固态 U 盘”的八年,从 100 块到 1000 块

这篇文章&#xff0c;聊聊自从 2015 年开始&#xff0c;到目前为止&#xff0c;我使用固态硬盘组装的高速 U 盘&#xff0c;以及它们的使用体验&#xff0c;以及一些明显的坑。 写在前面 2015 年的 8 月&#xff0c;我剁手下单了一块 32G 大小&#xff0c;NGFF接口的三星 22x…

关于 C/C++ 中在指针前加 const 关键字的作用说明

1. 作用说明&#xff1a; 在指针前加 const 的用途为&#xff1a;不可改变指针指向的内存的值&#xff0c;即将该指向指向的内存中的变量置为只读&#xff08;read-only) 变量。 但是&#xff0c;可以给 const 的指针赋值&#xff0c;即将具有 const 属性的指针指向别的内存地…

Linux 内核镜像分析

文章目录 前言一、概述二、bzImage2.1 镜像分析 三、zImage3.1 镜像分析参考链接 前言 介绍了vmlinux的来源&#xff0c;以及分析方法&#xff1b; 一、概述 在linux系统中&#xff0c;vmlinux&#xff08;vmlinuz&#xff09;是一个包含linux kernel的静态链接的可执行文件…