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

news2024/9/25 9:08:45

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.coloradmin.cn/o/2163126.html

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

相关文章

【Python】探索 PyTorch 在机器学习中的应用

在机器学习的浪潮中&#xff0c;PyTorch 以其灵活性和易用性成为了研究者和开发者的热门选择。本文将探讨 PyTorch 在机器学习领域的应用&#xff0c;并展示如何使用 PyTorch 构建一个基本的机器学习模型。 ⭕️宇宙起点 &#x1f3ac; 机器学习简介&#x1f4a2; PyTorch 与机…

胤娲科技:AI程序员——重塑编程世界的魔法师

当魔法遇上代码 想象一下&#xff0c;一个对编程一无所知的初中生&#xff0c;在熙熙攘攘的展会现场&#xff0c;仅凭几句简单的提示词&#xff0c;就在几分钟内创造出一个功能完备的倒计时网页。 这听起来像是科幻电影中的场景&#xff0c;但如今&#xff0c;在阿里云「通义灵…

心觉:如何重塑高效学习的潜意识(1)两种方法的优缺点

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作180/1000天 你的学习习惯是什么呢 学习的时候是感到轻松吗 很多人感觉现在是知识大爆炸的时代&#xff0c;每天都会产生海量的知…

C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(2)

2.2、用析构函数释放内存 每当完成动态分配内存时&#xff0c;都应该释放。如果在一个对象中动态分配内存&#xff0c;释放内存的地方就是析构函数。编译器保证当对象被破坏时会调用析构函数。下面就是Spreadsheet类定义中的析构函数&#xff1a; export class Spreadsheet { …

秋分之际,又搭建了一款微信记账本小程序

在这个金色的季节里&#xff0c;每一粒粮食都蕴含着生命的奇迹&#xff0c;每一片叶子都在诉说着成长的故事。秋分之际&#xff0c;又搭建了一款微信记账本小程序。 产品概述 微信记账本小程序是一款便捷的个人财务管理工具&#xff0c;旨在帮助用户轻松记录、管理和分析日常…

STM32基础学习笔记-NVIC中断面试基础题4

第四章、NVIC: 外部中断_串口中断 1、按键按下后&#xff0c;GPIO 会产生一个上升/下降沿&#xff0c;G030内部是如何触发外部中断的呢&#xff1f; 配置GPIO引脚&#xff1a; 首先&#xff0c;需要将特定的GPIO引脚配置为输入模式&#xff0c;并设置为外部中断源。这通常通过…

Nexus3的妙用

nexus 3使用场景 Nexus是一个全能仓库,通过部署nexus可以实现包含yum、apt、Maven、pypi、docker等的多种仓库。以下是nexus的适用场景: 当公共仓库无法访问或缓慢时,搭建nexus。比如国内docker无法访问,需要镜像加速。可以使用海外主机部署nexus,在nexus中创建docker(p…

uniapp微信小程序遮罩层u-popup禁止底层穿透

添加 touchmove.prevent&#xff0c;遮罩层底部的页面就不会滑动了微信开发者工具不生效&#xff0c;真机生效 <u-popup :show"showEwm" close"closeEwm" mode"center" touchmove.prevent><view class"ewmshow"></vie…

宝塔部署vue项目出现的各种问题

使用宝塔面板&#xff0c;网站页面&#xff0c;构建php静态网页 问题一&#xff1a;图片等静态资源无法加载 找到真正请求的url&#xff0c; 然后在项目目录下面创建对应的目录&#xff0c;将资源放入 问题二&#xff1a;刷新出现404 在这里任意位置添加 ## 添加上这个配…

力扣【118-杨辉三角】【数组-C语言】

题目&#xff1a;力扣-118 杨辉三角&#xff1a;&#xff08;算法思路&#xff09; 1. 每行第一个数和最后一个数都是1 2. 把杨辉三角左端对齐&#xff0c;从第三行开始&#xff0c;非首尾的元素值等于上一行同列的元素与该元素之前的元素之和&#xff0c;即 t [ j ] r e t …

软考高级:需求工程- 需求获取方式 AI解读

需求获取是项目管理和产品开发中的关键步骤&#xff0c;关系到项目的成功与否。你提到的几种需求获取方式涵盖了多个维度&#xff0c;以下我将逐一解析它们的用途与优势。 生活化例子 需求获取就像你要准备一场家庭聚会&#xff0c;需要先了解每个家庭成员的喜好。你可以通过…

【OceanBase 诊断调优】—— GC问题根因分析

GC 流程涉及到 RS 的状态切换和 LS 的资源安全回收&#xff0c;流程上较长。且 GC 线程每个租户仅有一个&#xff0c;某个日志流 GC Hang 死时会卡住所有其余日志流的 GC&#xff0c;进而造成更大的影响。 本文档会帮助大家快速定位到 GC 故障的模块&#xff0c;直达问题核心。…

SQL分组聚合子查询问题

场景 订单表 t_order 有如下数据&#xff1a; 字段分别为&#xff0c; 销售订单号、 订货数量 发货表 t_order_delivery 有如下数据&#xff1a; 字段分别为&#xff0c; 销售订单号、 发货数量 问题 问题1&#xff1a;查询部分发货的 销售订单号数据 &#xff1f; 分析…

数据集-目标检测系列-海洋鱼类检测数据集 fish>> DataBall

数据集-目标检测系列-海洋鱼类检测数据集 fish>> DataBall 数据集-目标检测系列-海洋鱼类检测数据集 fish 数据量&#xff1a;1W 数据项目地址&#xff1a; gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/…

wpf中如何访问控件和生成使用事件?

实际上对于初次使用wpf的同学来说&#xff0c;尤其是有winform编程经验的童鞋来说&#xff0c;最需要解决的就是快速掌握访问控件的方法以及生成和使用事件。这样才能让页面具有最起码的交互性。下面我们来分别讲述。 文章原出处&#xff1a;https://blog.csdn.net/haigear/ar…

「数组」离散化 / Luogu B3694(C++)

目录 概述 思路 算法过程 复杂度 Code 概述 Luogu B3694&#xff1a; 给定一个长度为 n 的数列 aa。定义 rank(i) 表示数列 a 中比 ai 小的不同数字个数再加一。 对 1≤i≤n&#xff0c;现在请你求出所有的 rank(i)。 输出格式 对每组数据&#xff0c;输出一行 n 个整数&a…

智慧照明,安全度夏:揭秘如何前置防御暴雨中的路灯杆漏电隐患

随着夏季暴雨频发&#xff0c;多地近期发生的多起路人因路灯杆漏电触电身亡的悲剧&#xff0c;再次为公众安全敲响了警钟。从河南郑州到辽宁营口&#xff0c;一起起触目惊心的触电事故&#xff0c;不仅夺走了宝贵的生命&#xff0c;也引发了社会各界对暴雨天气下公共设施安全隐…

轴承介绍以及使用

轴承&#xff08;Bearing&#xff09;是在机械传动过程中起固定、旋转和减小载荷摩擦系数的部件。也可以说&#xff0c;当其它机件在轴上彼此产生相对运动时&#xff0c;用来降低运动力传递过程中的摩擦系数和保持转轴中心位置固定的机件。 轴承是当代机械设备中一种举足轻重的…

Go Mail设置指南:如何提升发送邮件效率?

Go Mail使用技巧与配置教程&#xff1f;如何用Go Mail实现发信&#xff1f; 随着工作负载的增加&#xff0c;如何高效地发送和管理邮件成为了许多职场人士面临的挑战。AokSend将为您提供一份详细的Go Mail设置指南&#xff0c;帮助您提升发送邮件的效率&#xff0c;让您的邮件…

数据库学习1

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 登录 查看所有库 切换数据库 查看对应库所有的表 修改权限和密码 启动和停止服务器 创建数据库 查看数据库的表结构 创建表 在表…