2024年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-阅读程序题解析

2024 CCF认证第一轮(CSP-J)真题
二、阅读程序题
(程序输入不超过数组或字符串定义的范围,判断题正确填√错误填X;除特殊说明外,判断题 1.5分,选择题3分,共计40 分)
第一题
01 #include <iostream>
02 using namespace std;
03
04 bool isPrime(int n){
05 if (n <= 1){
06 return false;
07 }
08 for (int i=2;i*i<= n; i++){
09 if (n % i== 0){
10 return false;
11 }
12 }
13 return true;
14 }
15
16 int countPrimes(int n) {
17 int count= 0;
18 for (int i=2; i<= n; i++){
19 if (isPrime(i)) {
20 count++;
21 }
22 }
23 return count;
24 }
25
26 int sumPrimes(int n) {
27 int sum =0;
28 for (int i= 2; i<= n; i++){
29 if (isPrime(i)) {
30 sum += i;
31 }
32 }
33 return sum;
34 }
35
36 int main() {
37 int x;
38 cin >> x;
39 cout << countPrimes(x)<<" "<< sumPrimes(x)<< endl;
40 return 0;
41 }
程序分析
主要考查小朋友们读写程序能力和逻辑思维能力,此程序实现实现了判断一个数是否为质数,并计算小于等于给定数的所有质数的个数和。
- 函数isPrime判断一个数是否为质数。首先判断是否小于等于1,如果小于等于1,则不是质数,返回false。然后从2开始循环到该数平方根的整数部分(因为一个数可以分解成两个因数,其中一个必定小于等于它的平方根),判断是否存在能整除该数的因数,如果存在,则不是质数,返回false。如果循环结束后仍未找到能整除该数的因数,则该数是质数,返回true。
- 函数countPrimes计算小于等于给定数的所有质数的个数。从2开始循环到给定数,调用isPrime函数判断每个数是否为质数,如果是质数,则计数器加1。循环结束后,返回计数器的值。
- 函数sumPrimes计算小于等于给定数的所有质数的和。从2开始循环到给定数,调用isPrime函数判断每个数是否为质数,如果是质数,则累加到一个变量sum中。循环结束后,返回sum的值。
- 在主函数main中,程序首先读取一个整数x作为输入。然后调用countPrimes函数和sumPrimes函数计算小于等于x的所有质数的个数和,并将结果输出到标准输出流中,最后返回0表示程序执行结束
判断题
16、当输入为“10”时,程序的第一个输出为“4”,第二个输出为“17”
17、若将 isPrime(i)函数中for循环的条件改为 i<=n/2,输入“20”时,countPrimes(20)的 输出将变为“6”
18、sumPrimes 函数计算的是从 2 到 n 之间的所有素数之和
答案:16√ 17 × 18 √
答案分析:
16、从程序分析可以得出输入10,总共质数有:2、3、5、7,4个,和是17,答案正确
17、isPrime(i)for循环改成i<=n/2,依然能够正确校验出n是否是质数,输入20时,输出的结果不变还是8个,答案错误
18、从程序分析得知sumPrimes是求质数和,答案正确
单选题
19、当输入为“50”时,sumPrimes(50)的输出为
A、1060
B、328
C、381
D、275
答案:B
答案分析:从程序分析可以得出,输入50求的是2-50的质数之和,而50以内的质数有15个,分别是:2、3、5、7、11、13、17、19、23、29、31、37、41、43、47,累加为328,所以答案B
20、如果将 for(int i=2;i*i<=n;i++)改为 for(int i=2;i<=n;i++),输入“10”时,程序的输出
A、将不能正确计算 10 以内素数个数及其和
B、仍然输出“4”和“17”
C、输出“3”和 10
D、输出结果不变,但余小宁时间更短
答案:A
答案分析:因冲程序分析可以得出for循环是用来遍历从2开始一直遍历所有的除数,如果加上i等于n,那么将不能判断出对应的素数,因为后面的程序if语句里面是n%i,如果i等于n,那么所有的数都符合条件,所以答案A
第二题
01 #include <iostream>
02 #include <vector>
03 using namespace std;
04
05 int compute(vector<int> &cost) {
06 int n = cost.size();
07 vector<int> dp(n + 1, 0);
08 dp[1]= cost[0];
09 for (int i= 2;i<= n; i++){
10 dp[i] = min(dp[i- 1], dp[i -2]) + cost[i- 1];
11 }
12 return min(dp[n], dp[n -1]);
13 }
14
15 int main() {
16 int n;
17 cin >> n;
18 vector<int> cost(n);
19 for (int i=0;i<n; i++){
20 cin >> cost[i];
21 }
22 cout << compute(cost)<<endl;
23 return 0;
24 }
程序分析
主要考查小朋友们读写程序能力和逻辑思维能力,此程序是一个解决"爬楼梯"问题的动态规划算法。 该算法的思路是:每次可以选择爬一层或者爬两层,每次爬楼的消耗是给定的cost数组中对应位置的值。我们要求的是到达楼顶的最小消耗。
- 程序中的compute函数接收一个cost数组作为参数,计算出到达楼顶的最小消耗。
- 首先,我们定义一个大小为n+1的dp数组,其中dp[i]表示爬到第i层所需的最小消耗。
- 然后,我们初始化dp[1]为cost[0],因为爬到第一层的最小消耗就是cost[0]。
- 接下来,我们从第二层开始迭代计算dp数组。对于每一层i,我们有两种方式可以到达: 从上一层爬一层到达:这种情况下,消耗为dp[i-1] + cost[i-1],其中dp[i-1]表示到达上一层所需的最小消耗,cost[i-1]表示到达当前层的消耗。
- 从上两层直接跳过一层到达:这种情况下,消耗为dp[i-2] + cost[i-1],其中dp[i-2]表示到达上两层所需的最小消耗,cost[i-1]表示到达当前层的消耗。
- 然后,我们取这两种方式中的较小值作为dp[i]的值。
- 最后,返回dp[n]和dp[n-1]中的较小值,即到达楼顶的最小消耗。
- 在main函数中,首先读取输入的楼层数n,然后创建一个大小为n的cost数组,用于存储每一层的消耗。
- 接下来,使用循环读取输入的cost数组。
- 最后,调用compute函数计算最小消耗并输出结果。
- 整个程序的时间复杂度为O(n),空间复杂度为O(n)。
判断题
21、当输入的 cost 数组为{10,15,20}时,程序的输出为 15
22、如果将 dp[i-1]改为 dp[i-3],程序可能会产生编译错误
23、程序总是输出 cost 数组中的最小的元素
答案:21√ 22 × 23 ×
答案分析:
21、从程序分析可以得出要爬到楼顶可以选择第一次爬2层,第二次再爬2层,消耗就是15,答案正确
22、编译只是检测语法是否出错,修改后语法并没有错;只是对应数组下标变为负数,这个是运行时才会报错,答案错误
23、从程序分析可以得出程序输出的并不一定是cost数组中的最小元素,而是到达楼顶的最小消耗,答案错误
单选题
24、 当输入的 cost 数组为{1,100,1,1,1,100,1,1,100,1}时,程序的输出为
A、6
B、7
C、8
D、9
答案:A
答案分析:从程序分析可以得出,求的是最小消耗,所以可以选择的楼层为:1、3、5、7、9、10,而这6个楼层的消耗都是1,所以答案A
25、如果输入的 cost 数组为{10,15,30,5,5,10,20},程序的输出为
A、25
B、30
C、35
D、40
答案:B
答案分析:从程序分析可以得出,求的是最小消耗,所以可以选择的楼层为:2、4、6,对应的消耗为:15+5+10=30,所以答案B
26、若将代码中的 min(dp[i-1],dp[i-2])+cost[i-1]修改为 dp[i-1]+cost[i-2],输入 cost 数组为 {5,10,15}时,程序的输出为
A、10
B、15
C、20
D、25
答案:A
答案分析:从程序分析可以得出,如果修改之后对应的dp值为:[5,10,20],而最后返回的值是倒数第一个和倒数第二个中的最小值,所以答案A
第三题
01 #include <iostream>
02 #include <cmath>
03 using namespace std;
04
05 int customFunction(int a, int b){
06 if (b == 0){
07 return a;
08 }
09 return a + customFunction(a,b-1);
10 }
11
12 int main() {
13 int x, y;
14 cin >>x>>y;
15 int result = customFunction(x, y);
16 cout << pow(result, 2) << endl;
17 return 0;
18 }
程序分析
主要考查小朋友们读写程序能力和逻辑思维能力,程序通过递归实现计算y+1个x累加,最后将结果在进行平方。程序的逻辑如下:
- 定义了一个自定义函数customFunction,该函数将两个整数a和b作为参数,递归地计算y+1个x的和。
- 如果b等于0,则返回a;否则,返回a加上customFunction(a, b-1)的结果。
- 在主函数main中,定义了两个整数变量x和y,并通过cin输入从标准输入中读取它们的值。
- 调用customFunction函数,将x和y作为参数传递给它,并将结果保存在result变量中。
- 使用pow函数计算result的平方,并将结果输出到标准输出流中。
- 值得注意的是,该程序没有对x和y的输入进行错误处理,所以输入必须是非负整数,否则可能会导致不可预料的结果
判斯题
27、当输入为“2 3”时,customFunction(2,3)的返回值为“64”
28、当 b 为负数时,customFunction(a,b)会陷入无限递归
29、当 b 的值越大,程序的运行时间越长
答案:1× 2 √ 3 √
答案分析:
1、从程序分析可以得出输入2 3,返回的结果应该是4个2相加为8,答案错误
2、程序分析可以得出,b为负数的时候由于缺乏递归终止条件,所以会死循环,答案正确
3、递归的结束条件是b的值为0,所以当b的值越大,程序运行时间越长,答案正确
单选题
30、当输入为“5 4”时,customFunction(5,4)的返回值为
A、5
B、25
C、250
D、625
答案:B
答案分析:从程序分析可以得出,输入5 4,也就是5个5相加为25,所以答案B
31、如果输入 x = 3 和 y = 3,则程序的最终输出为
A、27
B、81
C、144
D、256
答案:C
答案分析:从程序分析可以得出,输入3 3,也就是4个3相加为12,12的平方为144,所以答案C
32、若将 customFunction 函数改为“return a + customFunction(a-1,b-1);并输 入“3 3”,则程序的最终输出为
A、9
B、16
C、25
D、36
答案:D
答案分析:修改之后customFunction计算的过程为:3+2+1=6,最后输出6*6=36,所以答案D
相关文章:
2024年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-阅读程序题解析
2024 CCF认证第一轮(CSP-J)真题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围,判断题正确填√错误填X;除特殊说明外,判断题 1.5分,选择题3分,共计40 分) 第一题 01 #include <iostream>…...
Hive ROW_NUMBER() 简介
在 Apache Hive 中,ROW_NUMBER() 是一个窗口函数,常用于为查询结果中的每一行生成唯一的行号。它在 SQL 查询结果集中按照指定的排序规则对每一行进行编号。ROW_NUMBER() 的实现依赖于 Hive 的分布式执行框架和排序机制。 为了理解 ROW_NUMBER() 的底层实…...
java是干什么的
Java 是一种广泛使用的编程语言,主要用于以下几个方面: Web 开发:Java 可以用于创建动态网页和 Web 应用程序,常见的框架有 Spring 和 JavaServer Faces(JSF)。 企业级应用:Java 被广泛应用于…...
AI与量化投资人才培养计划-连接职场 助力走在金融行业前沿
AI与量化投资人才培养计划-连接职场 助力走在金融行业前沿 人工智能(AI)的快速发展,量化投资已逐渐成为金融行业的新趋势,对专业人才的需求日益迫切。本文将深入探讨一项针对AI与量化投资的人才培养计划,旨在为金融专业…...
《CUDA编程》2.CUDA中的线程组织
0 来自GPU的hello world 在visua studio 中新建一个CUDA runtime项目,然后把kernel.cu中的代码删掉,输入以下代码 #include"cuda_runtime.h" #include"device_launch_parameters.h"#include<stdio.h>__global__ void hello_…...
学习篇 | Dockerized GitLab 安装使用(简单实操版)
1. 详细步骤 1.1 安装启动 postgresql 服务 docker pull sameersbn/postgresql:14-20230628docker run --name gitlab-postgresql -d \--env DB_NAMEgitlabhq_production \--env DB_USERgitlab --env DB_PASSpassword \--env DB_EXTENSIONpg_trgm,btree_gist \--volume /srv/…...
Linux服务器磁盘扩容
文章目录 扩容挂载 扩容 [rootserver8 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom vda 252:0 0 1T 0 disk ├─vda1 252:1 0 1G 0 par…...
Redis的一些数据类型(一)
(一)数据类型 我们说redis是key value键值对的方式存储数据,key是字符串,而value是一些数据结构,那今天就来说一下value存储的数据。 我们数据结构包含,String,hash,list,set和zest但…...
论文复现:考虑电网交互的风电、光伏与电池互补调度运行(MATLAB-Yalmip-Cplex全代码)
论文复现:考虑电网交互的风电、光伏与电池储能互补调度运行(MATLAB-Yalmip-Cplex全代码) 针对风电、光伏与电化学储能电站互补运行的问题,已有大量通过启发式算法寻优的案例,但工程上更注重实用性和普适性。Yalmip工具箱则是一种基于MATLAB平台的优化软件工具箱,被广泛应用…...
HTTP 协议介绍
基本介绍: HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP 是一种应用层协议,是基…...
解决windows上VMware的ubuntu虚拟机不能拷贝和共享
困扰多时的VMware虚拟机不能复制拷贝和不能看到共享文件夹的问题,终于解决了~ 首先确定你已经开启了复制拷贝和共享文件夹,并且发现不好用。。。 按照下面方式解决这个问题。 1,删除当前的vmware tools。 sudo apt-get remove --purge ope…...
Python+rust会是一个强大的组合吗?
今天想和大家讨论一个在技术圈子里越来越火的话题——Python和Rust的组合。 不少程序员都开始探索这两个语言的结合,希望能借助Python的简洁和Rust的高性能,来打造出既易用又强大的软件。 那么,这对CP(编程组合)真的…...
引用和指针的区别
引用(reference)和指针(pointer)都是 C 中用来间接访问内存中对象的机制,但它们有一些重要的区别。以下是它们在语法、用法和特性上的详细区别。 下面从7个方面来详细说明引用和指针的区别 1. 定义与语法区别 引用&…...
内容生态短缺,Rokid AR眼镜面临市场淘汰赛
AR是未来,但在技术路径难突破、生态系统难建设,且巨头纷纷下场的背景下,Rokid能坚持到黎明吗? 转载:科技新知 原创 作者丨王思原 编辑丨蕨影 苹果Vision Pro的成功量产和发售,以及热门游戏《黑神话》等在A…...
【论文阅读】StoryMaker | 更全面的人物一致性开源工作
文章目录 1 Motivation2 背景 相关工作 Related work3 Method 方法4 效果 1 Motivation 背景是 Tuning-free personalized image generation methods无微调的个性化图像生成方式在维持脸部一致性上取得了显著性的成功。这里我不是很了解 然而,在多个场景中缺乏整…...
读构建可扩展分布式系统:方法与实践14流处理系统
1. 流处理系统 1.1. 时间就是金钱 1.1.1. 从数据中提取有价值的知识和获得洞见的速度越快,就能越快地响应系统所观察的世界的变化 1.1.2. 信用卡欺诈检测 1.1.3. 网络安全中异常网络流量的捕获 1.1.4. 在支持GPS的驾驶应用程序中进行的实时路线规划 1.1.5. 社交…...
C++第2课——取余运算符的应用、浮点型和字符型(含视频讲解)
文章目录 1、课程笔记2、课程视频 1、课程笔记 /* #include<iostream> using namespace std; int main(){//cout<<"hello,world!";//运算符的优先级 () * / % -// 3/2 1...1 3%21 5%32 3%53 -3%2-1 3%-21//cout<<6/4%2;//int 向下取整6…...
SQL常用技巧总结
查询优化基本准则 1、ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名,因此 FROM 子句中写在最后的表(基础表 driving table)将被最先处理。 在FROM 子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。 例如: 表 T…...
AJAX(简介以及一些用法)
AJAX 1. 简介 什么是 Ajax Ajax 的全称是 Asynchronous JavaScript And XML (异步 JavaScript 和 XML )我们可以理解为:在网页中 利用 XMLHttpRequest 对象和服务器进行数据交互的方式就是 Ajax ,它可以帮助我们轻松实现网页…...
美畅物联丨GB/T 28181系列之TCP/UDP被动模式和TCP主动模式
GB/T 28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》作为我国安防领域的重要标准,为视频监控系统的建设提供了全面的技术指导和规范。该标准详细规定了视频监控系统的信息传输、交换和控制技术要求,在视频流传输方面,GB/T 2…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
