第五套CCF信息学奥赛c++练习题 CSP-J认证初级组 中小学信奥赛入门组初赛考前模拟冲刺题(阅读程序题)

第五套中小学信息学奥赛CSP-J考前冲刺题

二、阅读程序题

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

第一题 递归函数

1 #include<iostream>
2 using namespace std;
3 int p;
4 void fun(int &x,int &y);
5 void func (int &x,int &y){
6	if(y>x)return;
7	x--;y/=2;
8	fun(x,y);
9 }
10 void fun(int &x,int &y){
11	if(x==1)return;
12	x/=2;y+=p;
13	func(x,y);
14 }
15int main(){
16	int x,y;
17	cin>>x>>y>>p;
18	fun(x,y);
19	cout<<x<<' '<<y;
20	return 0;
21 }

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,此程序实现的是一个C++递归函数程序,主要功能是通过递归调用函数来操作输入的两个数x和y,最终输出最终的x和y的值。

  • 程序的主要部分如下: 声明了一个全局变量p
  • 定义了两个函数fun和func
  • 函数fun通过引用参数传递x和y的值,并且检查x是否等于1,如果是,则函数返回
  • 否则,将x除以2,y加上p的值,并调用函数func
  • 函数func通过引用参数传递x和y的值,并且检查y是否大于x,如果是,则函数返回
  • 否则,将x减1,y除以2,并调用函数fun
  • 在主函数main中,首先输入x、y和p的值,然后调用函数fun,并输出最终的x和y的值

判断题

1)、将第 04行的&去除后,程序仍能通过编译

2)、读人的x,y,p为int 范围内任意值时程序均能完成运行

3)、若x=1时,输出的x,y与输人的一致

4)、输出的x必然小于等于输人的x。

答案:1 × 2 × 3 √ 4 ×

答案分析:

1、从程序中可以看出第4行是函数声明,第10行是对应函数的定义,这两行参数应该要保持一致,错误

2、当x、y、p均为-3的时候,程序就进入死循环,错误

3、从程序第11行可以看出,如果输入的x=1,将直接返回,所以输出和输入的xy一致,正确

4、从程序分析可以看出,如果输入的x为负数的时候就不一定了,错误

单选题

5)、输人为7 33 2时,输出为

A、4 31

B、4 35

C、3 31

D、3 35

答案:D

答案分析:从程序分析,然后带入输入对应的值,可以计算得到输出的x和y为:3和35,答案D

6)、输人为33 7 2时,输出为

A、5 3

B、3 5

C、6 4

D、4 6

答案:B

答案分析:从程序分析,然后带入输入对应的值,可以计算得到输出的x和y为:3和5,答案B

第二题 素数判定

1 #include<iostream>
2 using namespace std;
3 #include<cmath>
4
5 bool IsPrime(int num)
6 {
7	for(int i=2;i<=sqrt(num);i++)
8	{
9		if(num%i==0)
10		{
11			return false;
12		}
13	}
14	return true;
15 }
16 int main()
17 {
18	int num=0;
19	cin>>num;
20	if(IsPrime(num))
21	{
22		cout<<"YES"<<endl;
23	}
24	else
25	{
26		cout<<"NO"<<endl;
27	}
28
29	return 0;
30 }

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,此程序实现判断一个给定的数是否为素数

  • 首先,定义了一个名为IsPrime的函数,用于判断一个数是否为素数
  • 该函数接收一个整数参数num
  • 在IsPrime函数内部,使用一个for循环从2开始遍历到sqrt(num),用于判断num是否可以被整除
  • 通过判断num%i是否等于0,如果等于0,则表示num可以被i整除,即num不是素数,返回false
  • 如果循环结束后仍然没有返回false,表示num不能被2到sqrt(num)之间的任意整数整除,即num是素数,返回true
  • 在main函数中,首先定义了一个变量num用于接收用户输入的数
  • 然后通过cin语句从标准输入读取一个整数,存入num变量中
  • 接下来通过调用IsPrime函数判断num是否为素数
  • 如果是素数,则输出"YES",否则输出"NO"
  • 最后返回0,表示程序执行成功

判断题

1)、第19行输人 97时,输出为“NO”(不含引号)

2)、第19 行输人 119时,输出为“YES”(不含引号)

3)、若将第7行的“<="改成“<”,程序输出的结果一定不会改变

4)、当程序执行第14行时,i的值为 sqrt(num)。

答案:1× 2 × 3 √ 4 ×

答案分析:

1、从程序分析可以得出97是素数,输出为YES,错误

2、从程序分析可以得出119不是素数,119=7*17,输出为NO,错误

3、从程序分析中可以看出,如果一个数为质数的平方,这时候就会判断出错,错误

4、从for循环中可以看出,要执行14行,必须是for循环全部执行完毕,i的值应该是sqrt(num)+1,错误

单选题

5)、最坏情况下,此程序的时间复杂度是

A、O(num)

B、O(num^2)

C、O(sqrt(num))

D、O(log num)

答案:C

答案分析:从for循环中可以看出,最坏的情况就是i=sqrt(n),所以最坏情况下时间复杂度为O(sqrt(n)),答案C

6)、若输人的num为 20以内的正整数,则输出为“YES"的概率是

A、0.45

B、0.4

C、0.5

D、0.35

答案:A

答案分析:从程序分析中可以看出,20以内的素数有:2、3、5、7、11、13、17、19,共8个,但是如果输入的是1,也会输出YES,所以共有9个数,9/20=0.45,答案A

第三题 数字排序

1 #include<iostream>
2 using namespace std;
3 const int maxn=105;
4 int n,a[maxn],b[maxn];
5 int main()
6 {
7	cin>>n;
8	int x;
9	for(int i=1;i<=n;i++){
10		cin>>x;
11		a[i]=b[i]=x;
12	}
13	
14	for(int i=1;i<=n;i++)
15		for(int j=i+1;j<=n;j++){
16			if (a[i]>a[j]) swap(a[i],a[j]);
17			if (b[i]<b[j]) swap (b[i],b[j]);
18		}
19	
20	for (int i=1;i<=n;i++)cout<<a[i]<<" ";
21	cout<<"\n" ;
22	for (int i=1;i<=n;i++)cout<<b[i]<<" ";
23	cout<<"\n";
24	return 0;
25 }

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,这段程序实现的功能是对输入的n个数字进行排序,并输出两种排序的结果

  • 程序首先读取输入的n,并声明了两个大小为maxn的数组a和b用于存储输入的数字
  • 程序接着通过for循环将输入的数字依次赋值给a和b数组
  • 然后,程序使用两层嵌套的for循环进行排序
  • 内层的for循环从i+1开始,遍历剩下的数字,通过比较大小来交换位置,使得a[i]的值最小,b[i]的值最大
  • 最后,程序使用两个for循环分别输出a和b数组的元素
  • 时间复杂度分析:  最坏情况下,内层for循环的执行次数为(n-1)+(n-2)+...+1 = (n-1)*n/2,所以时间复杂度为O(n^2)。 因此,整个程序的时间复杂度为O(n^2)。

判斯题

1) 若输人的 X[1],X[2],…,X[N]中有相同的数,程序会陷人死循环

2) 当且仅当输入的X[1],X[2],…,X[N]全部相同时输出的两行结果相同

3) 该算法的原理是基数排序

答案:1× 2√ 3  ×

答案分析:

1、从程序分析可以得出这是实现排序,第一行是从小到大,第二行是从大到小,有相同的数也不影响排序结果,错误

2、从程序分析可以得出只有输入都是一样的时候结果才会相同,正确

3、以上程序的算法原理是选择排序。基数排序是一种非比较排序算法,而选择排序是一种比较排序算法。在基数排序中,根据数字的每一位进行排序;而在选择排序中,通过每次选择最小(或最大)的元素,将其放在已排序部分的末尾。错误

单选题

4) 若输人的X[1],X[2],…,X[N]互不相同,则下列说法正确的是

A、输出的两行结果相同

B、将输出的第一行结果整体翻转后,将与第二行相同

C、将输出的第一行结果的第一项与最后一项交换后,将与第二行相同

D、以上说法都不正确

答案:B

答案分析:程序分析可以得出第一行是从小到大排序,第二行是从大到小排序,答案B

5) 下列说法不正确的是

A、输出的第一行即为将 X[1],X[2],…,X[N]从小到大排序后得到的结果

B、输出的第二行即为将 X[1],X[2],…,X[N]从大到小排序后得到的结果

C、若将“a[i]>a[j]"改为“a[i]>=a[j]”,则程序输出无变化

D、不存在时间复杂度更优的能与本程序达到相同目的算法

答案:D

答案分析:因为输出的结果中有B和C,所以输入的字符串就是S和P,所以答案A

6) 该程序的时间复杂度为

A、O(n)

B、O(n log n)

C、O(n^2)

D、O(n sqrt(n))

答案:C

答案分析:从程序分析可以得出该程序的时间复杂度为C

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

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

相关文章

git常用命令集合

1.差异对比 显示出branch1和branch2中差异的部分 git diff branch1 branch2 --stat显示出所有有差异的文件的详细差异 git diff branch1 branch2查看branch1分支有&#xff0c;而branch2中没有的log git log branch1 ^branch22.分支 列出所有本地分支 git branch列出所有远…

学生管理系统(python实现)

新增学生显示学生查找学生删除学生存档到文件 约定好数据的存储格式&#xff1a; 约定把数据保存在和py文件同级目录中&#xff0c;文件名为record.txt 文件内容按照行文本的方式来表示 首先这是一个文本文件&#xff0c;里面包含了很多行&#xff0c;每一行代表一个学生 …

主要用于工控主板、工业控制器、程序烧录下载器、仿真器、新能源充电桩等众多涉及RS232通讯的产品——D3232

一、应用领域 D3232芯片主要用于工控主板、工业控制器、程序烧录下载器、仿真器、新能源充电桩等众多涉及RS232通讯的产品。 二、基本特性 D3232芯片由两个线路驱动器、两个线路接收器和双电荷泵电路组成&#xff0c;具有HBM>15kV、CDM>2kV的ESD保护能力&#xff0c;并且…

NLP_文本张量表示方法_2(代码示例)

目标 了解什么是文本张量表示及其作用.文本张量表示的几种方法及其实现. 1 文本张量表示 将一段文本使用张量进行表示&#xff0c;其中一般将词汇为表示成向量&#xff0c;称作词向量&#xff0c;再由各个词向量按顺序组成矩阵形成文本表示. ["人生", "该&q…

【力扣 - 盛最多水的容器】

题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容…

LeetCode 0232.用栈实现队列:基础数据结构的学习

【LetMeFly】232.用栈实现队列&#xff1a;基础数据结构的学习 力扣题目链接&#xff1a;https://leetcode.cn/problems/implement-queue-using-stacks/ 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff0…

【源码】imx6ull实现触摸屏单点实验-移植tslib和qt

一、本实验实验的器材&#xff1a; 1.正点原子imx6ull的阿尔法开发板v2.2 2.屏幕ALIENTEK 4.3 RGBLCD 二、实验已经移植好的文件&#xff1a; 仓库代码&#xff1a;https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.文件说明 arm-qt.tar.bz2&#xff1a;移植好的…

笔记本电脑里回收站删除的文件怎么找回来?这几招帮你恢复

在日常使用笔记本电脑的过程中&#xff0c;我们可能会因为不小心或者误操作&#xff0c;将一些重要的文件删除到回收站&#xff0c;甚至可能直接从回收站中清空。面对这种情况&#xff0c;很多人会感到惊慌失措&#xff0c;不知道如何是好。但其实&#xff0c;即使文件从回收站…

通过SDKMAN安装各种版本JDK

文章目录 1. 安装SDKMAN管理器2. 通过SDK管理器安装JDK3. 参考链接 1. 安装SDKMAN管理器 安装SDKMAN的脚本为: # 1.1 安装: 如果没有权限可以考虑sudo用户执行; curl -s "https://get.sdkman.io" | bash# 1.2 安装完成后查看版本号 sdk version# 1.3 查看帮助信息 …

4 款用文本生成视频(text-to-video)的 AIGC 工具推荐

多模态大模型MiniGPT4和LLaVA开源&#xff08;GPT4图文对话平替&#xff09;&#xff1b;MOSS等模型放出权重 - 哔哩哔哩 Runway Gen2 Video-LLaVA: 论文地址:https://arxiv.org/pdf/2311.10122.pdfGitHub 地址:https://github.com/PKU-YuanGroup/Video-LLaVAHuggingface demo…

TQ15EG开发板教程:创建运行petalinux2019.1

工程网盘链接&#xff1a;https://pan.baidu.com/s/1vFRpzmbifXt7GypU9aKjeg 提取码&#xff1a;0ylh 首先需要使用与petalinux相同版本的vivado创建工程&#xff0c;与之前不同的是在创建硬件设计时需要勾选上添加bit文件&#xff0c;所以要在生成bit文件之后再创建硬件设计…

如何搭建Nacos集群

1.搭建Nacos集群 众所周知&#xff0c;在实际的工作中&#xff0c;Nacos的生成环境下一定要部署为集群状态 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们计划的集群结构&#xff1a; 我就直接在本机上开三个Nacos来搭…

【swift】struct与class 的区别

数据类型&#xff1a;struct是值类型&#xff0c;class是引用类型。 值类型变量直接包含数据&#xff0c;赋值时也是值拷贝&#xff0c;或者叫深拷贝&#xff0c;所以多个变量的操作不会相互影响。 引用类型变量存储的是对数据的引用地址&#xff0c;后者称为对象&#xff0c;…

Spring(22) Spring中的9种设计模式

目录 一、简单工厂模式&#xff08;Simple Factory&#xff09;二、工厂方法模式&#xff08;Factory Method&#xff09;三、单例模式&#xff08;Singleton&#xff09;四、适配器模式&#xff08;Adapter&#xff09;五、代理模式&#xff08;Proxy&#xff09;七、观察者模…

【StarryCoding P101】排水管道 题解(单调栈+贪心算法)

[P101] 排水管道 问题描述 给定一个长度为 n n n 的数组 a a a &#xff0c;请问至少修改多少个元素&#xff0c;可以使得数组成为一个严格上升的序列。 数组中需要时刻保持 a i > 0 a_i > 0 ai​>0。 输入描述 第一行一个整数 T T T 表示测试用例个数。 ( …

C++练手题系列一

第 1 题 【 问答题 】 • 有多少种二叉树 输入n(1<n<13)&#xff0c;求n个结点的二叉树有多少种形态 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 整数n 输出答案 样例输入 3 样例输出 5 第 2 题 【 问答题 】 • 城堡问题 1 2 3 4 5 6 7 ################…

【Golang星辰图】探索网络和HTTP的奇妙世界:使用Go语言打造高性能应用

提升Web开发效率&#xff1a;学会使用Go语言的网络和HTTP库 前言 随着互联网的快速发展&#xff0c;网络和HTTP成为了现代应用开发中必不可少的部分。Go语言作为一门快速、可靠和高效的编程语言&#xff0c;提供了丰富的网络编程和HTTP处理库&#xff0c;使得构建高性能的网络…

凌特杯,第二届,数字音频传输。simulink matlab

终于比赛进入了尾声&#xff0c;最为指导老师也是非常的激动。接下来进入了论文写作阶段和视频拍摄阶段。 第二届凌特杯规定的硬件是ADI的Pluto&#xff0c;成本在2k以内&#xff0c;能支持MATLAB&#xff0c;它能够流畅的实时播放接收到的音乐数据&#xff0c;并把数据保存成…

家居EDI:La-Z-Boy EDI 项目案例

家居行业市场规模庞大&#xff0c;总规模稳定增长。随着信息技术的发展以及全球化进程的加快&#xff0c;许多家居行业的老牌企业在全球范围内广泛扩展其供应链体系&#xff0c;产业链较长&#xff0c;从原材料生产供应、生产制造到销售运输&#xff0c;如何高效、准确地处理这…

CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse

介绍 持续集成、交付和部署是旨在帮助增加开发速度并发布经过充分测试的可用产品的策略。持续集成鼓励开发团队尽早测试和集成其对共享代码库的更改&#xff0c;以最小化集成冲突。持续交付建立在此基础上&#xff0c;通过消除部署或发布过程中的障碍。持续部署则进一步通过自…