当前位置: 首页 > news >正文

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认证第一轮&#xff08;CSP-J&#xff09;真题 二、阅读程序题 (程序输入不超过数组或字符串定义的范围&#xff0c;判断题正确填√错误填X;除特殊说明外&#xff0c;判断题 1.5分&#xff0c;选择题3分&#xff0c;共计40 分) 第一题 01 #include <iostream>…...

Hive ROW_NUMBER() 简介

在 Apache Hive 中&#xff0c;ROW_NUMBER() 是一个窗口函数&#xff0c;常用于为查询结果中的每一行生成唯一的行号。它在 SQL 查询结果集中按照指定的排序规则对每一行进行编号。ROW_NUMBER() 的实现依赖于 Hive 的分布式执行框架和排序机制。 为了理解 ROW_NUMBER() 的底层实…...

java是干什么的

Java 是一种广泛使用的编程语言&#xff0c;主要用于以下几个方面&#xff1a; Web 开发&#xff1a;Java 可以用于创建动态网页和 Web 应用程序&#xff0c;常见的框架有 Spring 和 JavaServer Faces&#xff08;JSF&#xff09;。 企业级应用&#xff1a;Java 被广泛应用于…...

AI与量化投资人才培养计划-连接职场 助力走在金融行业前沿

AI与量化投资人才培养计划-连接职场 助力走在金融行业前沿 人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;量化投资已逐渐成为金融行业的新趋势&#xff0c;对专业人才的需求日益迫切。本文将深入探讨一项针对AI与量化投资的人才培养计划&#xff0c;旨在为金融专业…...

《CUDA编程》2.CUDA中的线程组织

0 来自GPU的hello world 在visua studio 中新建一个CUDA runtime项目&#xff0c;然后把kernel.cu中的代码删掉&#xff0c;输入以下代码 #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的一些数据类型(一)

&#xff08;一&#xff09;数据类型 我们说redis是key value键值对的方式存储数据&#xff0c;key是字符串&#xff0c;而value是一些数据结构,那今天就来说一下value存储的数据。 我们数据结构包含&#xff0c;String&#xff0c;hash&#xff0c;list&#xff0c;set和zest但…...

论文复现:考虑电网交互的风电、光伏与电池互补调度运行(MATLAB-Yalmip-Cplex全代码)

论文复现:考虑电网交互的风电、光伏与电池储能互补调度运行(MATLAB-Yalmip-Cplex全代码) 针对风电、光伏与电化学储能电站互补运行的问题,已有大量通过启发式算法寻优的案例,但工程上更注重实用性和普适性。Yalmip工具箱则是一种基于MATLAB平台的优化软件工具箱,被广泛应用…...

HTTP 协议介绍

基本介绍&#xff1a; HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff1a; 全称超文本传输协议&#xff0c;是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP 是一种应用层协议&#xff0c;是基…...

解决windows上VMware的ubuntu虚拟机不能拷贝和共享

困扰多时的VMware虚拟机不能复制拷贝和不能看到共享文件夹的问题&#xff0c;终于解决了~ 首先确定你已经开启了复制拷贝和共享文件夹&#xff0c;并且发现不好用。。。 按照下面方式解决这个问题。 1&#xff0c;删除当前的vmware tools。 sudo apt-get remove --purge ope…...

Python+rust会是一个强大的组合吗?

今天想和大家讨论一个在技术圈子里越来越火的话题——Python和Rust的组合。 不少程序员都开始探索这两个语言的结合&#xff0c;希望能借助Python的简洁和Rust的高性能&#xff0c;来打造出既易用又强大的软件。 那么&#xff0c;这对CP&#xff08;编程组合&#xff09;真的…...

引用和指针的区别

引用&#xff08;reference&#xff09;和指针&#xff08;pointer&#xff09;都是 C 中用来间接访问内存中对象的机制&#xff0c;但它们有一些重要的区别。以下是它们在语法、用法和特性上的详细区别。 下面从7个方面来详细说明引用和指针的区别 1. 定义与语法区别 引用&…...

内容生态短缺,Rokid AR眼镜面临市场淘汰赛

AR是未来&#xff0c;但在技术路径难突破、生态系统难建设&#xff0c;且巨头纷纷下场的背景下&#xff0c;Rokid能坚持到黎明吗&#xff1f; 转载&#xff1a;科技新知 原创 作者丨王思原 编辑丨蕨影 苹果Vision Pro的成功量产和发售&#xff0c;以及热门游戏《黑神话》等在A…...

【论文阅读】StoryMaker | 更全面的人物一致性开源工作

文章目录 1 Motivation2 背景 相关工作 Related work3 Method 方法4 效果 1 Motivation 背景是 Tuning-free personalized image generation methods无微调的个性化图像生成方式在维持脸部一致性上取得了显著性的成功。这里我不是很了解 然而&#xff0c;在多个场景中缺乏整…...

读构建可扩展分布式系统:方法与实践14流处理系统

1. 流处理系统 1.1. 时间就是金钱 1.1.1. 从数据中提取有价值的知识和获得洞见的速度越快&#xff0c;就能越快地响应系统所观察的世界的变化 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 子句中的表名&#xff0c;因此 FROM 子句中写在最后的表(基础表 driving table)将被最先处理。 在FROM 子句中包含多个表的情况下&#xff0c;你必须选择记录条数最少的表作为基础表。 例如&#xff1a; 表 T…...

AJAX(简介以及一些用法)

AJAX 1. 简介 什么是 Ajax Ajax 的全称是 Asynchronous JavaScript And XML &#xff08;异步 JavaScript 和 XML &#xff09;我们可以理解为&#xff1a;在网页中 利用 XMLHttpRequest 对象和服务器进行数据交互的方式就是 Ajax &#xff0c;它可以帮助我们轻松实现网页…...

美畅物联丨GB/T 28181系列之TCP/UDP被动模式和TCP主动模式

GB/T 28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》作为我国安防领域的重要标准&#xff0c;为视频监控系统的建设提供了全面的技术指导和规范。该标准详细规定了视频监控系统的信息传输、交换和控制技术要求&#xff0c;在视频流传输方面&#xff0c;GB/T 2…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...