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

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

二、阅读程序题

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

第一题 归并排序

1 #include <iostream>
2 using namespace std;
3 const int Maxn=10005;
4 int n,b[Maxn];
5 inline void mergesort(int*a,int l,int r){
6	if(l==r)return;
7	int mid=l+r>>1;
8	mergesort(a,l,mid),mergesort(a,mid+1,r);
9	int i=l,j=mid+1,cnt=0;
10	while(i<=mid && j<=r){
11		if (a[i]<=a[j])b[++cnt]=a[i++];
12		else b[++cnt]=a[j++];
13	}
14	while(i<=mid)b[++cnt]=a[i++];
15	while(j<=r)b[++cnt]=a[j++];
16	for(i=l;i<=r;i++)a[i]=b[i-l+1];
17 }
18 int a[Maxn];
19 int main(void){
20	cin>>n;
21	for (int i=1;i<=n;i++)cin>>a[i];
22	mergesort(a,1,n);
23	for (int i=1;i<=n;i++)cout<<a[i]<<(i==n ?'\n':' ');
24	return 0;
25 }

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,此程序实现了归并排序算法,用于对输入的n个数进行排序。具体实现过程如下:

  • 定义了一个全局常量Maxn,表示数组的最大长度。同时定义了一个辅助数组b,用于在归并过程中临时存储元素。
  • 定义了一个mergesort函数,用于实现归并排序。该函数接受一个数组a,以及数组的左右边界l和r。若左右边界相等,则表示只有一个元素,无需排序,直接返回。否则,将数组a一分为二,分别对左半部分和右半部分进行归并排序。
  • 在归并排序的过程中,先求出左半部分的中点mid,然后递归调用mergesort函数,对左半部分进行排序。再递归调用mergesort函数,对右半部分进行排序。
  • 接下来,定义变量i和j,分别指向左半部分和右半部分的起始位置。定义一个变量cnt,用于计数。在while循环中,比较左半部分和右半部分当前位置的元素,将较小的元素放入辅助数组b,并将相应位置向后移动一位。
  • 最后,将剩余的元素按顺序放入辅助数组b。再将辅助数组b中的元素复制回原数组a。
  • 主函数中,首先读入整数n,并定义一个数组a,用于存储n个数字。 循环读入n个数字,将它们存入数组a。 调用mergesort函数,对数组a进行归并排序。 最后循环输出数组a的元素,实现排序后的结果。

判断题

1)、该算法中“int *a”没有传值

2)、该算法会换行

3)、该算法中mergesort 函数时间复杂度为 0(nlogn)

4)、如果输人为“5 4 3 9 7 8"则输出为3 4 7 8 9 \n

答案:1 × 2 √ 3 √ 4 √

答案分析:

1、从程序分析可以得出主函数种的a就是给int * a传值,只是传递进来的是数组首地址

2、在输出最后一个数字的时候就会换行

3、归并排序的时间复杂度就是O(n log n)

4、从程序分析中可以看出归并排序是按从小到大排序的

单选题

5)、下面哪句与“i==n?'\n':' '”相同

A、.i!=1 ? '\n' : ’ ‘

B、" \n"[i==n]

C、" \n"[i !=n]

D、’  ‘

答案:B

答案分析:从程序分析中可以看出当最后一个数字输出的时候才换行,等价于答案B

6)、该算法的最劣复杂度与哪个排序算法相同

A、快速排序

B、选择排序

C、计数排序

D、堆排序

答案:D

答案分析:快速排序和选择排序的时间复杂度都是O(n*n),计数排序的时间复杂度是O(n+k),堆排序的时间复杂度是O(n log n),答案D

第二题 并查集

1 #include<iostream>
2 using namespace std;
3 int i,j,k,n,m,f[10010],p1,p2,p3;
4 int find(int k){
5	if(f[k]==k)return k;
6	return f[k]=find(f[k]);
7 }
8 int main()
9 {
10	cin>>n>>m;
11	for(i=1;i<=n;i++)f[i]=i;
12	for(i=1;i<=m;i++){
13		cin>>p1>>p2>>p3;
14		if(p1==1)
15			f[find(p2)]=find(p3);
16		if(p1==2)
17			if(find(p2)==find(p3))
18				printf("y\n");
19			else
20				printf("N\n");
21	}
22	return 0;
23 }

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,此程序是一个并查集的实现,用来解决集合的合并和查询问题。

  • 程序中定义了一个数组f[10010],表示每个元素所属的集合,初始时每个元素都是自己所属的集合。
  • 函数find(k)用来查找元素k所属的集合,如果f[k]等于k,则返回k。否则,通过递归调用find(f[k])的方式,找到k所属的集合,并返回。
  • 在主函数中,首先读入n和m,分别表示元素个数和操作次数。
  • 接下来通过一个循环,遍历m次,读入每个操作的信息。
  • 如果操作为1,则将元素p2和p3所属的集合合并在一起,即将p2所属的集合的根节点设置为p3所属的集合的根节点。
  • 如果操作为2,则判断元素p2和p3是否属于同一个集合,即判断它们的根节点是否相同。如果根节点相同,则输出"y",否则输出"N"。
  • 最后,程序返回0,表示正常结束。

判断题

1)、该算法中p1的作用是确定操作类型

2)、去掉 for(i=1;i<=n;i++)f[i]=i;对该算法没有影响

3)、输人2 2 1 1 2 2 1 2  输出为Y

4)、输人2 1 2 1 2输出为N

答案:1 √ 2 × 3 √ 4 √ 

答案分析:

1、从程序分析可以得出p1的作用就是判断操作类型

2、如果去掉for循环,就意味着并查集没有初始化,肯定有影响

3、从程序分析可以得出开始p1=1的时候1和连一起,所以后一次输入的时候1和2就是在一个集合里面

4、从程序分析可以得出只有一步p1=2,并没有p1=1进行先合并集合,而是之间判断1和2是否同一个集合

单选题

5)、该算法时间复杂度为

A、O(m log n)

B、O(nm)

C、O(n+m)

D、O(nmm)

答案:A

答案分析:从程序分析以及程序中可以得出,如果没有按次进行合并的时间复杂度为O(log n),按次之后就应该是O(m log n),答案A

6)、把 return f[k]=find(f[k]);改成return find(f[k]);最差时间复杂度为

A、O(m log n)

B、O(nm)

C、O(n+m)

D、O(nmm)

答案:B

答案分析:从程序分析以及程序中可以得出,如果没有路径压缩的时间复杂度为O(n),再进行m次之后的时间复杂度就是O(nm),答案B

第三题 因式分解组合

#include<iostream>
using namespace std;
int t,x[100],a[100];
void work(int d,int i,int n){
	int k;
	if(n==1)
	{
		for(k=0;k<d;k++)
			printf("%3d",a[k]);
		printf("\n");
	}
	else
		for(k=i;k<t;k++)
			if(n % x[k]==0)
			{
				a[d]=x[k];
				work(d+1,k,n/x[k]);
			}
}
int main(){
	int i,k,n;
	cin>>n;
	for(i=n;i>1;i--)if(n%i==0) x[t++]=i;
	work(0,0,n);
}

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,这段代码使用了递归来求解给定数n的所有因子的组合。

  • 首先,在主函数中,通过cin读取一个整数n,然后从n开始递减,判断n的因子,并将这些因子存储在数组x中。同时,使用变量t来记录数组x中的元素个数。
  • 接下来,调用work函数进行递归求解。work函数有三个参数,分别是当前因子的组合长度d,当前起始位置i以及剩余待分解的数n。
  • 如果n等于1,说明当前已经找到了一组因子的组合,通过循环遍历数组a,将当前组合中的因子输出,并换行。
  • 否则,使用循环遍历数组x,并判断当前数n是否可以被数组中的元素整除。如果可以,则将该元素作为当前组合的一个因子,并递归调用work函数,传入更新后的参数。
  • 整个递归过程中,d增加表示找到了一个新的因子,i保持不变以确保每个因子只使用一次,n更新为n除以当前因子。
  • 最终,所有的组合都会被找到并输出。 

判斯题

1) for(i=n;i>1;i--)if(n%i==0)x[t++]=i;的作用是求出n的所有因数

2) 该程序的作用是对n进行质因数分解

3) prin("%3d",a[k]);中去掉3对程序没有影响

4) 去掉if(n%x[k]==0)对程序有影响

答案:1 × 2 × 3  × 4 √ 

答案分析:

1、从程序分析可以看出,并不是求因数,如果是求因数应该要包括数字1

2、从程序分析可以看出,该程序是求出n的所有因数组合

3、这里的3表示的是输出占位符,也就是每个输出数字占3个位,如果去掉了因素就合并在一起变成几十上百,就变了

4、这里的if表示找到了能被n分解的因子,如果去掉就不是所有的都能被整除,也就是并不是所欲的都是n的因子

单选题

5)如果输人为2,那么输出为

A、2

B、2 1

C、1 2

D、2 2

答案:A

答案分析:从程序分析中可以得出,如果输入的是2,也就只会执行一次,只有2这个因素,因为程序中排除了1这个因素,答案A

6)如果输人为72,那么输出的非回车字符有多少行

A、14

B、15

C、16

D、17

答案:C

答案分析:从程序分析中可以得出求得是因式分解的组合数,72可以分解为:

72
36  2
24  3
18  4
18  2  2
12  6
12  3  2
 9  8
 9  4  2
 9  2  2  2
 8  3  3
 6  6  2
 6  4  3
 6  3  2  2
 4  3  3  2
 3  3  2  2  2

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java程序设计】【C00285】基于Springboot的游戏分享网站(有论文)

基于Springboot的游戏分享网站&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的游戏分享网站 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在网站首页可以查看首页、游戏…

Linux环境基础开发工具使用篇(三) git 与 gdb

一、版本控制器-git 1.简单理解: ①git既是服务端&#xff0c;又是客户端 ②git会记录版本的变化 ③git是一个去中心化的分布式软件 git/gitee 是基于git仓库搭建的网站&#xff0c;让版本管理可视化 2.git 三板斧提交代码 查看安装的git版本 git--version 命令行提交代…

SpringMVC 学习(四)之获取请求参数

目录 1 通过 HttpServletRequest 获取请求参数 2 通过控制器方法的形参获取请求参数 3 通过 POJO 获取请求参数&#xff08;重点&#xff09; 1 通过 HttpServletRequest 获取请求参数 public String handler1(HttpServletRequest request) <form action"${pageCont…

Linux 文件操作

目录 C语言下的文件操作 Linux下的文件操作 文件描述符的前因后果 文件描述符的概念 文件描述符的分配规则 理解C语言的FILE结构体 Linux重定向 文件缓冲区 文件系统 文件系统的概念 ext2文件系统 对ext2的补充 虚拟文件系统的概念 软硬链接 C语言下的文件操作 …

Java零基础 - 关键字 instanceof

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【深入理解设计模式】代理设计模式

代理设计模式&#xff1a; 代理设计模式是一种结构型设计模式&#xff0c;它允许你提供一个替代物或占位符来控制对其他对象的访问。在代理模式中&#xff0c;一个类代表另一个类的功能。这种类型的设计模式属于结构型模式&#xff0c;因为该模式涉及类和对象的组合。 概述 …

外包干了3个月,技术倒退明显...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

笔记本hp6930p安装Android-x86避坑日记

一、序言 农历癸卯年前大扫除&#xff0c;翻出老机hp6930p&#xff0c;闲来无事&#xff0c;便安装Android-x86玩玩&#xff0c;期间多次入坑&#xff0c;随手记之以避坑。 笔记本配置&#xff1a;T9600,4G内存&#xff0c;120G固态160G机械硬盘 二、Android-x86系统简介 官…

【QT+QGIS跨平台编译】之五十二:【QGIS_CORE跨平台编译】—【qgsexpressionlexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

Vue + Echarts页面内存占用高问题解决

Vue Echarts页面内存占用高问题解决 1.问题描述 目前使用的是Vue2 Echarts4.x的组合&#xff0c;页面如下所示。 就是一个类似于神策的数据看板页面&#xff0c;左侧是一个导航栏&#xff0c;右侧看板页面中包含很多个报表图片&#xff0c;其中报表页面中对Echarts图表进…

前端工程化面试题 | 18.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【AIGC大模型】跑通wonder3D (windows)

论文链接&#xff1a;https://arxiv.org/pdf/2310.15008.pdf windows10系统 显卡&#xff1a;NVIDIA rtx 2060 一、安装anaconda 二、安装CUDA 11.7 (CUDA Toolkit 11.7 Downloads | NVIDIA Developer) 和 cudnn 8.9.7(cuDNN Archive | NVIDIA Developer)库 CUDA选择自定…

人工智能 — 立体视觉、双目系统

目录 一、立体视觉1、定义2、应用领域3、原理 二、单目系统和双目系统1、单目系统2、双目系统 三、视差 一、立体视觉 1、定义 立体视觉是一种计算机视觉技术&#xff0c;其目的是从两幅或两幅以上的图像中推理出图像中每个像素点的深度信息。 2、应用领域 机器人、辅助驾驶…

《低功耗方法学》翻译——第十四章:电源切换网络设计

第十四章&#xff1a;电源切换网络设计 功率门控是在待机或休眠模式下降低漏电功率最有效的方法&#xff0c;但这种方法存在诸如休眠晶体管占用的硅面积、永久和虚拟电源网络的布线资源以及复杂的功率门控设计和实现过程等开销&#xff0c;影响设计风险和进度。 除了开销外&a…

万界星空科技商业开源MES

一、万界星空科技商业开源MES系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、适合二开的开源MES。 1.万界星空开源MES制造执行系统的Java开源版本。 开源mes系统包括系统管理&#xff0c;车间基础数据管理&#xff0c;计…

第三节:kafka sarama 遇到Bug?

文章目录 前言一、先上结果二、刨根问底总结 前言 前面两节&#xff0c;我们已经简单应用了sarama的两个类型Client和ClusterAdmin&#xff0c;其中有一个案例是获取集群的ControllerId&#xff0c;但是在后面的测试过程过程中&#xff0c;发现一个问题&#xff0c;返回的Cont…

【基于Ubuntu20.04的Autoware.universe安装过程】方案二:双系统 | 详细记录 | 全过程图文 by.Akaxi

目录 一、Autoware.universe背景 Part-1&#xff1a;安装双系统教程 二、查看Windows引导方式 三、制作安装盘 四、设置电脑配置 1.关闭bitlocker 2.压缩硬盘分区 3.关闭Secure Boot 4.关闭intel RST 5.BIOS设置U盘引导 五、安装Ubuntu20.04 1.ventoy引导 2.安装配…

matlab悬臂梁有限元分析

1、内容简介 略 47-可以交流、咨询、答疑 2、内容说明 略 建模说明 设计一个长方体的悬臂梁&#xff0c;长宽高分别为100m、10m和15m&#xff0c;材料特性为杨氏模量2e5&#xff0c;泊松比0.3&#xff0c; Matlab有限元分析&#xff08;截图&#xff09; 上图为悬臂梁的扰度…

Redis高并发缓存架构性能优化实战

Redis高并发缓存架构性能优化实战 场景1: 中小型公司Redis缓存架构以及线上问题实战 线程A在master获取锁之后&#xff0c;master在同步数据到slave时&#xff0c;master突然宕机(此时数据还没有同步到slave)&#xff0c;然后slave会自动选举成为新的master&#xff0c;此时线…

K8S安装部署

常见的K8S安装部署方式 Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用。 部署地址&#xff1a;Install Tools | Kubernetes Kubeadm Kubeadm也是一个工具&#xff0c;提供kubeadm init和kube…
最新文章