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

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

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

相关文章

【C++进阶】2024年了set、map还搞不懂底层细节?

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 一、前情提要1、什么是关联式容器&#xff1f;2、键值对又是什么&#xff1f; 二、树形结构的关联式容器1、set1.1…

在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.1)

在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.1) Install macOS on unsupported Macs 请访问原文链接&#xff1a;https://sysin.org/blog/install-macos-on-unsupported-mac/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

【CoppeliaSim V4.7】The Python interpreter could not handle the wrapper script

[sandboxScript:error] The Python interpreter could not handle the wrapper script (or communication between the launched subprocess and CoppeliaSim could not be established via sockets). Make sure that the Python modules ‘cbor2’ and ‘zmq’ are properly i…

【C++】stack和queue的使用及模拟实现

stack就是栈的意思&#xff0c;这个结构遵循后进先出(LIFO)的原则&#xff0c;可以将栈想象为一个子弹夹&#xff0c;先进去的子弹后出来。 queue就是队列的意思&#xff0c;这个结构遵循先进先出(FIFO)的原则&#xff0c;可以将对列想象成我们排队买饭的场景&#xff0c;先排…

Shopee 大促想爆单如何准备?EasyBoss ERP为你准备了一份攻略!

Shopee下半年第二个大促节点——10.10品牌大促即将来到&#xff0c;根据Shopee的官方的数据&#xff0c;9.9大促当天&#xff0c;Shopee Mall单量增至平日4倍。 老板们&#xff0c;准备好自己的热卖爆款冲击10.10大促了吗&#xff1f; 图源&#xff1a;Shopee 为助力大家迎战大…

大模型速通LLM神书来了《从头开始构建大型语言模型》,尚未发布,GitHub标星22k!!

这本大模型书籍资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 本书介绍 《从零构建大模型》是一本即将于今年10月底发布的书籍&#xff0c;github已经吸引了惊人的21.7k标星&#xff01;作者是威斯康星大学麦迪逊分…

N个utils(类加载-初始化-序列化)

fasterxml.jackson.databind.ObjectMapper(springboot本身就集成了) public class ObjectMapper {// 公共的ObjectMapper对象public static com.fasterxml.jackson.databind.ObjectMapper mapper new com.fasterxml.jackson.databind.ObjectMapper();/*** Description: 将数据…

推荐一款开源的链路监控系统

12.9k star&#xff0c;最强链路监控系统推荐&#xff0c;推荐 用过cat、pinpoint、skywalking等链路监控系统&#xff0c;各有优劣&#xff0c;但用的最多的还是pinpoint&#xff0c;工作6年&#xff0c;其中有4年都在用pinpoint&#xff0c;所以也比较熟悉&#xff0c;之前也…

鸿蒙界面开发——组件(10):单选框Radio复选框checkbox 下拉框select 多条件筛选Filter

单选框Radio 单选框一直会有这个圆圈&#xff0c;在选中和未选中之间切换状态。 Radio通过调用接口来创建&#xff0c;接口调用形式如下&#xff1a; Radio(options: RadioOptions) Radio(options: {value: string, group: string ,indicatorType:RadioIndicatorType,(新增) …

NET 7 AOT 的使用以及+NET 与 Go 互相调用

目录 背景 C# 部分 环境要求 创建一个控制台项目 体验 AOT 编译 C# 调用库函数 减少体积 C# 导出函数 C# 调用 C# 生成的 AOT Golang 部分 安装 GCC Golang 导出函数 .NET C# 和 Golang 互调 C# 调用 Golang Golang 调用 C# 其他 背景 其实&#xff0c;规划这篇文章有一段时间了…

AI产品经理必知的133个专业术语

一、机器学习与数据科学 1、监督学习&#xff08;Supervised Learning&#xff09; 监督学习是机器学习的一种形式&#xff0c;其中模型通过带标签的数据集进行训练。训练数据包括输入特征&#xff08;X&#xff09;和对应的输出标签&#xff08;Y&#xff09;&#xff0c;模…

哪个牌子的麦克风好?选购无线麦克风必看的五大隐藏风险

随着短视频行业的兴起。短视频已经成为我们日常生活的一个重要表达载体&#xff0c;同时无线麦克风也是正式进入到了我们的视野之中&#xff0c;这种麦克风凭借没有线材束缚、兼容性更好、拾音更好的特性&#xff0c;成为了不少短视频创作者必不可少的“搭档之一”&#xff0c;…

uniapp APP自动更新组件

在uniapp中实现APP自动更新功能&#xff0c;主要涉及到客户端在功能不断迭代过程中&#xff0c;需要进行自动更新。uniapp一个详细的实现步骤&#xff0c;包括客户端和服务器端的配置&#xff1a; 服务器端配置 版本信息管理 服务器端需要维护一个数据库或配置文件&#xff…

C语言-动态内存分配讲解

目录 ✨1.什么是动态内存分配 &#x1f495;2.动态内存开辟函数 malloc ✨3.malloc函数的检查&#xff08;两种方法&#xff09; &#x1f495;4.动态内存释放函数 free ✨5.free 函数接收空指针 ✨6.为什么要释放动态内存 &#x1f495;7.动态内存开辟函数calloc &#…

【优选算法之位运算】No.7--- 经典位运算算法

文章目录 前言一、位运算几种模型&#xff1a;1.1 基础的位运算&#xff1a; << >> ~ & | ^1.2 几种模型&#xff1a;1.3 模型练习 二、位运算示例&#xff1a;2.1 判定字符是否唯⼀2.2 丢失的数字2.3 两整数之和2.4 只出现⼀次的数字 II2.5 消失的两个数字 前…

STM32G474使用DMA和SPI1实现自发自收

STM32G474使用DMA搬运数据&#xff0c;实现SPI自发自收&#xff0c;验证SPI收发是否正常。测试时&#xff0c;需要将SPI1_MISO和SPI1_MOSI短接。SPI1外设用作主机&#xff0c;其接口&#xff1a;将SPI1_SCK映射到PA5,SPI1_MISO映射到PA6,SPI1_MOSI映射到PA7,SPI1_NSS映射到PA4。…

基于PHP+MySQL组合开发地方门户分类信息网站源码系统 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展&#xff0c;地方门户分类信息网站逐渐成为城市生活不可或缺的一部分。它们涵盖了房产、招聘、二手交易、生活服务等多个领域&#xff0c;为当地居民提供了全方位的信息服务。为了满足这一市场需求&#xff0c;我们开发了这款基于PHPMySQL的…

2015年国赛高教杯数学建模A题太阳影子定位解题全过程文档及程序

2015年国赛高教杯数学建模 A题 太阳影子定位 技术就是通过分析视频中物体的太阳影子变化&#xff0c;确定视频拍摄的地点和日期的一种方法。   1.建立影子长度变化的数学模型&#xff0c;分析影子长度关于各个参数的变化规律&#xff0c;并应用你们建立的模型画出2015年10月…

Maxim(美信)—MAX20079AATP/VY PMIC芯片详解

写在前面 本系列文章主要讲解Maxim&#xff08;美信&#xff09;—MAX20079AATP/VY PMIC芯片的相关知识&#xff0c;希望能帮助更多的同学认识和了解MAX20079AATP/VY芯片。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) PMIC是Power Management Int…

自动驾驶系列—盲点检测(BSD)功能:智能驾驶安全的关键保障

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…