第四套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");}elsefor(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  29  89  4  29  2  2  28  3  36  6  26  4  36  3  2  24  3  3  23  3  2  2  2

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

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

相关文章

OpenHarmony Docker移植实践

Docker简介 从操作系统诞生之日起&#xff0c;虚拟化技术就不断的演进与发展&#xff0c;结合目前云原生的发展态势&#xff0c;容器无疑是其中的重要一环。 Docker是一个开源的软件项目&#xff0c;可以在Linux操作系统上提供一层额外的抽象&#xff0c;让用户程序部署在一个…

深度学习在过冷沸腾气泡动力学分割中的应用

Application of deep learning for segmentation of bubble dynamics in subcooled boiling 深度学习在过冷沸腾气泡动力学分割中的应用 期刊信息&#xff1a;International Journal of Multiphase Flow 2023 级别&#xff1a;EI检索 SCI升级版工程技术2区 SCI基础版工程技术3区…

AIGC专栏9——Scalable Diffusion Models with Transformers (DiT)结构解析

AIGC专栏9——Scalable Diffusion Models with Transformers &#xff08;DiT&#xff09;结构解析 学习前言源码下载地址网络构建一、什么是Diffusion Transformer (DiT)二、DiT的组成三、生成流程1、采样流程a、生成初始噪声b、对噪声进行N次采样c、单次采样解析I、预测噪声I…

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

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

跨区域复制建筑UI输入框脚本迷你世界

--复制区域文件 --设置坐标起点&#xff0c;终点 --创建区域 --获取坐标id,data --星空露珠工作室制作 local pos1{x-16,y7,z28} local pos2{x28,y44,z-9} local block{num0} local str{} local str0{} local num0 local count0 local ui6 --几个输入框 local romath.random(…

幻兽帕鲁服务器配置怎么选?多少钱?

腾讯云幻兽帕鲁专用服务器CPU内存配置如何选择&#xff1f;根据玩家数量选择CPU内存配置&#xff0c;4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置&#xff0c;腾讯云服务器网txyfwq.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置…

JVM垃圾收集器【如何找到垃圾、清除垃圾的算法、垃圾回收器】

JVM垃圾收集器 GC基本原理垃圾回收什么是垃圾?如何找到这个垃圾&#xff1f;1&#xff09;引用计数法&#xff08;Reference Counting&#xff09;2&#xff09;根可达算法&#xff08;GCRoots Tracing&#xff09;3&#xff09;回收过程4&#xff09;对象引用 清除垃圾的算法…

Java+SpringBoot+Vue+MySQL:疫情隔离酒店管理的全面技术解决方案

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

基于频率增强的数据增广的视觉语言导航方法(VLN论文阅读)

基于频率增强的数据增广的视觉语言导航方法&#xff08;VLN论文阅读&#xff09; 摘要 视觉和语言导航&#xff08;VLN&#xff09;是一项具有挑战性的任务&#xff0c;它需要代理基于自然语言指令在复杂的环境中导航。 在视觉语言导航任务中&#xff0c;之前的研究主要是在空间…

你的电脑未正确启动怎么办 电脑未正确启动自动修复的解决方法

我们在遇到一些蓝屏、黑屏等系统问题的时候,往往会优先选择电脑自带的修复功能,但是很多小伙伴在修复之后打开电脑却出现“你的电脑未正确启动”的提示,这可能与突然断电、系统更新、MBR或BCD损坏等原因有关,那么电脑未正确启动怎么办? 解决办法 方法一:执行系统还原…

RAM-DSIR:眼底和前列腺图像泛化能力增强,免除不同的扫描仪、成像协议和操作者等多种因素差异,影响学习效果

RAM-DSIR&#xff1a;眼底和前列腺图像泛化能力增强&#xff0c;免除不同的扫描仪、成像协议和操作者等多种因素差异&#xff0c;影响学习效果 提出背景总体架构两种领域适应策略数学构造 效果 提出背景 论文&#xff1a;https://arxiv.org/pdf/2208.03901.pdf 代码&#xff…

(详细使用指南)Linux下交叉编译带ffmpeg的opencv并移植到RK3588等ARM端

一 问题背景 瑞芯微RK3588等嵌入式板作为边缘端设备为算法模型的部署提供了便利&#xff0c;目前很多分类或好检测模型针对边缘端做了优化或量化&#xff0c;使得在边缘端也能达到实时稳定的识别和检测效果。 但嵌入式设备普遍的flash emmc不大&#xff0c;一般在32G左…

MySQL - 事务日志

目录 1. redo日志 1.1 为什么需要REDO日志 1.2 REDO日志的好处、特点 1. 好处 2. 特点 1.3 redo的组成 1.4 redo的整体流程 1.5 redo log的刷盘策略 1.6 不同刷盘策略演示 1. 流程图 ​编辑2. 举例 1.7 写入redo log buffer 过程 1.8 redo log file 1. 相关参数…

初识Lombok

前言 最近读一些公司的业务代码&#xff0c;发现近几年的java项目工程中都使用了lombok&#xff0c;lombok是一个可以自动生成get,set、toString等模板类方法的工具框架&#xff0c;程序再引入lombok后&#xff0c;添加一个注解便可以不写get\set\toString等方法。 Lombok示例…

DALL-E 系列 (1-3)

DALL-E 系列 (1-3) 本文主要梳理 DALL-E 系列图像生成模型的整体框架&#xff0c;相关论文中都包含了丰富的训练、优化细节&#xff0c;对这些细节本文不做过多介绍&#xff0c;有兴趣的读者可以阅读原文。注意&#xff0c;在阅读本文之前&#xff0c;最好先了解 VAE、VQVAE、…

SQL进阶(三):Join 小技巧:提升数据的处理速度

复杂数据结构处理&#xff1a;Join 小技巧&#xff1a;提升数据的处理速度 本文是在原本sql闯关的基础上总结得来&#xff0c;加入了自己的理解以及疑问解答&#xff08;by GPT4&#xff09; 原活动链接 用到的数据&#xff1a;链接 提取码&#xff1a;l03e 目录 1. 课前小问…

静态时序分析:SDC约束命令set_load详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 set_load命令用于指定端口(port)或线网(net)的负载电容&#xff0c;该指令的BNF范式&#xff08;有关BNF范式&#xff0c;可以参考以往文章&#xff09;为&#…

锂电池SOC估计 | PyTorch实现基于Basisformer模型的锂电池SOC估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 PyTorch实现基于Basisformer模型的锂电池SOC估计 锂电池SOC估计&#xff0c;全新【Basisformer】时间序列预测 1.采用自适应监督自监督对比学习方法学习时序特征&#xff1b; 2.通过双向交叉注意力机制计算历史序列和…

计算机网络面经-TCP的拥塞控制

写在前边 前边我们分享了网络分层协议、TCP 三次握手、TCP 四次分手。今天我们继续深入分享一下 TCP 中的拥塞控制。 对于 TCP 的拥塞控制,里边设计到很多细节,平平无奇的羊希望通过这一节能够将这部分内容串通起来,能够让你更深刻的记忆这部分内容。 思维导图 1、什么…

嵌入式学习 Day 23

一. 进程基本概念: 1.进程: 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息&#xff08;根据CPU占用率排序&#xff09;…