中小学信息学奥赛CSP-J认证 CCF非专业级别软件能力认证-入门组初赛模拟题第三套(阅读程序题)

CSP-J入门组初赛模拟题第三套

二、阅读程序题

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

第一题

1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4 int i,j,n;
5 int x[101],y[101];
6 int main ()
7 {
8	cin>>n;
9	for(i=1;i<=n;i++)cin>>x[i];
10	for(i=1;i<=n-1;i++)
11		for(j=i+1;j<=n;j++)
12			if( x[i]>x[j])
13				y[j]++;
14			else if(x[i]<x[j])
15				y[i]++;
16	for(i=1;i<=n;i++)
17		printf("%5d ",y[i]);
18	cout<<endl;
19	return 0;
20}

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,此程序主要是实现了一个计数排序的算法。先输入一个整数n,表示接下来要输入n个整数,然后依次将这n个整数存入数组x中。然后使用两个嵌套的循环遍历数组x,比较x[i]和x[j]的大小,如果x[i]>x[j],则y[j]的值加1,表示在x[j]后面有多少个数比它小;如果x[i]<x[j],则y[i]的值加1,表示在x[i]后面有多少个数比它大。最后输出数组y中的元素。

判断题

1)、把第13行与第15 行互换位置,结果不会改变

2)、第14 行把 if( x[i]<x[j])删掉效果一样。

3)、第11行把i+1改成1,数组y每个元素的值增加1倍。

4)、数组y[i]中存的是x[i]在数列中从大到小的次序

答案:1 × 2 × 3 √ 4 ×

答案分析:

1、y数组中记录的是大于当前元素的个数,如果交换结果就反了,所以错误

2、删掉效果不一样,因为还有相等的情况,所以错误

3、如果改成1,比较过的数据会在下次数据进行比较时候重复计算

4、y数组中只记录了比当前索引对应元素大的次数,但是最后并没有进行排序,所以严格来说错误

单选题

5)、此程序的时间复杂度是

A、O(\log_{2}n)

B、O(n\log_{2}n)

C、O(n^{2})

D、O(n)

答案:C

答案分析:因为程序中有一个嵌套for循环,所以是n的平方,所以答案C

6)、此程序如果n输入4,然后输人2 4 1 3,输出结果是

A、1 2 3 4

B、2 0 3 1

C、4 3 2 1

D、1 3 0 2

答案:B

答案分析:根据程序分析可以得出y数组中存的是比当前索引对应元素大的个数,比2大的又4和3,也就是2,所以答案B

第二题

1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4 int n,i,x;
5 int d[11];
6 int main()
7 {
8	cin>>n;
9	for(i=1;i<=n;i++)
10	{
11		cin>>x;
12		d[x]=d[x]+1;
13	}
14	d[0]=0;
15	for(i=1;i<=10;i++)
16		d[i]=d[i-1]+d[i];
17	for(i=1;i<=10;i++)
18		if(d[i]!=d[i-1])
19			printf("%3d:%4d_",i,d[i-1]+1);
20	return 0;
21}

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,此程序是一个统计输入数字出现次数的程序。

主要思路:

  1. 输入一个数字n,表示接下来要输入n个数字;
  2. 用数组d[11]来记录每个数字出现的次数,数组下标表示数字,数组值表示该数字出现的次数;
  3. 循环n次,输入每个数字x,并将d[x]的值加1;
  4. 初始化d[0]=0;
  5. 循环10次(i从1到10),将d[i]的值更新为d[i-1]+d[i],即将前i个数字出现的总次数存储在d[i]中;
  6. 再次循环10次,如果d[i]不等于d[i-1],则输出i和d[i-1]+1

判断题

1)、输入x的只应在[0,n-1]的范围内

2)、把第12行改成“d[x]++”,不影响程序运行结果

3)、对任意在[1,9]之间的数i,都有 d[i-1]<d[i]<d[i+1]

4)、把第18行改成“if(d[i]>d[i-1])”,程序运行的结果会发生改变

答案:1 × 2 √ 3 × 4 ×

答案分析:

1、从程序中可以看出d数组是一个全局数组,大小为11,所以能接受的范围应该是[0-10],所以错误

2、d[x]++和12行d[x]=d[x]+1 在这里是等价的,所以正确

3、当某个数没有输入的时候,这时候d数组对应的这个下标的值和前一个是一样的

4、d数组中存的数前一个数要么是小于后一个数要么是一样大,所以改成大于是可以的,结果不变

单选题

5)、 输人n=10后,接着输人:1 3 4 3 5 2 4 3 5 2后,程序输出结果为

A、1:1 2:2 3:3 4:2 5:3

B、1:1 2:2 3:4 4:7 5:9

C、1:0 2:1 3:2 4:1 5:2

D、1:1 2:2 3:3 4:4 5:5

答案:B

答案分析:从程序分析可以得出,前一个是对应的数字i,后一个是比数字i小的数字出现的次数累加,具体分析如下:

当i=1,输出的是d[0]+1,d[0]=0,所以输出1;

i=2,输出的是d[1]+1,而d[1]=d[0]+1出现的次数=0+1=1,所以输出2;

i=3,输出的是d[2]+1,而d[2]=d[1]+2出现的次数=2+2=4,所以输出4;

所以答案B

6)、把程序第19行改成“print("%3d",i);"后,输人n=10后,接着输人:1 3 4 1 5 4 4 3 5 1后,程序输出结果为

A、1 2 3 4 5

B、3 2 3 2

C、4 3 4 3

D、1 3 4 5

答案:D

答案分析:改成上面输出语句后,由于输入数字里面没有数字2,所以数组d[2]=d[1],2就不会输出,所以答案D

第三题

1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4 int j,i,m;
5 int a[10];
6 int main()
7 {
8	for(i=2;i<=6;i++)
9		a[i]=i+1;
10	do
11	{
12		m=2;
13		for(i=3;i<=6;i++)
14			if(a[m]>a[i])m=i;
15		a[m]=a[m]+m;
16		m=1;
17		
18		for(i=2;i<=5;i++)
19			for(j=i+1;j<=6;j++)
20				if(a[i]<a[j])m=0;
21	}while(m==0);
22	printf("%d",a[2]);
23	return 0;
24}

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,该程序的目标是通过循环和比较操作,得到数组中a[2]的值。具体的算法逻辑是通过do-while循环,将数组中的元素进行加法和比较,直到满足一定的条件后跳出循环,并输出a[2]的值。

  1. 在do-while循环的开始,数组a[i]的初始值为{0, 0, 3, 4, 5, 6, 7}。
  2. 在每次循环中,m被赋值为2,然后对于i从3到6,如果a[m]>a[i],就将m更新为i。由于a[2]等于3,所以在第一次循环时,m不会更新。
  3. 接下来,a[m]被更新为a[m]+m,即a[3]=3+2=5。此时,数组a[i]变为{0, 0, 5, 4, 5, 6, 7}。
  4. 然后,在两个嵌套的for循环中,会检查a[i]是否小于a[j],如果是,则将m更新为0。由于a[2](即5)小于 a[5](也是6),所以m被更新为0。
  5. 然后继续循环,直到m不等于0后退出循环;

判斯题

1) 程序结束时,a[2]的值一定是数组a中的最大值

2) 第 21行“m==0”成立时,数组a[i](2≤i≤6)从大到小排序

3) 程序输出时,a数组满足:对任意的2≤i<6,有a[i]>a[i+1]

4) 删除第16行代码“m=1"程序结果会发生改变

答案:1 √ 2 × 3 × 4 ×

答案分析:

1、结束的时候a[2]及后面的元素都是一样大的,为61,所以正确

2、从程序分析可以看出当m==0成立时,数组a[i](2≤i≤6)并没有从大到小排序,所以错误

3、程序最后输出时,应该是a[i]<=a[i+1],所以错误

4、删除m=1并不会影响程序结果,因为m=1赋值在后续循环里面一直么有用到,一直都是被重新赋值为0

单选题

5) 程序的输出结果为(

A、58

B、59

C、60

D、61

答案:D

答案分析:在每次a[2]都是加2,开始又是3所以排除AC,最后输出的时候a[2]到a[6]的值都是61,答案D

6) 此程序的时间复杂度是

A、O(n{3})

B、O(n\log n)

C、O(n{2})

D、O(n)

答案:A

答案分析:因为程序是三重循环,所以应该是立方,答案A

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

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

相关文章

高校实验室危险化学品如何管理?看了这篇文章让您管理危化品不在难!

采用‘一人一格’负责制&#xff0c;实现网格化、精准化、精细化安全管理可快速、全面、准确地掌控实验室危化品使用信息及危废管理&#xff0c;系统功能涵盖危化品的计划申购、采购入库、领用、退还、统计、查询管理等模块。采用“五双”原则&#xff0c;实现学校对实验室危化…

【多线程】线程的概念与创建

多线程 1. 认识线程&#xff08;Thread&#xff09;线程是什么为啥要有线程进程和线程的区别Java 的线程 和 操作系统线程 的关系 2.第⼀个多线程程序3.创建线程⽅法1 继承 Thread 类⽅法2 实现 Runnable 接⼝方法3 匿名内部类创建 Thread ⼦类对象方法4 匿名内部类创建 Runnab…

线程池工作过程

线程池工作流程 线程池的处理流程总结 线程池的处理流程 当提交一个新任务到线程池时&#xff0c;线程池的处理流程如下&#xff1a; 1、线程池判断核心线程池里的线程是否都在执行任务。如果不是&#xff0c;则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执…

用Python和OpenCV搭建自己的一维码和QRCode扫描仪(步骤 + 源码)

导 读 本文主要介绍使用Python和OpenCV搭建自己的一维码和QRCode扫描仪&#xff08;步骤 源码&#xff09;。 项目简介 本文我们将创建一个程序来扫描图像中的二维码和条形码。对于这个程序&#xff0c;我们需要三个包&#xff0c;分别是OpenCV、NumPy和pyzbar。大多数 Pyth…

【leetcode题解C++】51.N皇后 and 76.最小覆盖子串

51. N皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方…

C#安装CommunityToolkit.Mvvm依赖

这里需要有一定C#基础&#xff0c; 首先找到右边的解决方案&#xff0c;右键依赖项 然后选择nuget管理 这里给大家扩展一下nuget的国内源&#xff08;https://nuget.cdn.azure.cn/v3/index.json&#xff09; 然后搜自己想要的依赖性&#xff0c;比如CommunityToolkit.Mvvm 再点…

学历太低,可以学这5个技术,不但好找工作,工资也挺高的!

前言 我今年23岁&#xff0c;勉强把高中上完了。 大家都说上高中的时候非常辛苦&#xff0c;但在我看来&#xff0c;却不是这样的。 因为那时候根本就没有&#xff0c;把精力放在学习上面&#xff0c;而是经常出去泡网吧。 没办法&#xff0c;一个班级里面&#xff0c;大多…

《苍穹外卖》知识梳理6-缓存商品,购物车功能

苍穹外卖实操笔记六—缓存商品&#xff0c;购物车功能 一.缓存菜品 可以使用redis进行缓存&#xff1b;另外&#xff0c;在实现缓存套餐时可以使用spring cache提高开发效率&#xff1b;   通过缓存数据&#xff0c;降低访问数据库的次数&#xff1b; 使用的缓存逻辑&#…

【STM32 CubeMX】SPI_Flash_W25Q64的操作方法

文章目录 前言一、W25Q64操作方法基本概念1.1 读数据1.2 写使能1.3 读状态1.4 擦除扇区1.5 烧写页 总结 前言 在嵌入式系统开发中&#xff0c;使用外部 SPI Flash 存储器可以为 STM32 微控制器提供额外的存储空间&#xff0c;以存储程序代码、配置数据等。W25Q64 是一款常见的…

洛谷P8627 饮料换购 题解

#题外话&#xff08;第27篇题解&#xff09;&#xff08;本题为普及-难度&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P8627 #思路&#xff08;用while循环&#xff0c;循环到山穷水尽为止&#xff0c;用一个计数的计量&#xff09; #代码 #include …

Linux系统——防火墙Firewalld

目录 一、firewalld介绍 1.归入zone顺序 2.firewalld zone分类 3.预定义服务 二、图形化操作 1.打开firewalld图形化界面 2.以http服务为例&#xff0c;打开httpd服务 3.修改端口号 三、命令行配置 1.基础配置 2.查看现有firewalld设置 3.设置查看默认区 4.添加源…

软考-系统集成项目管理中级-信息系统集成与服务管理

本章重要知识点 信息系统集成是指将计算机软件、硬件、网络通信、信息安全等技术和产品集成为能够满足用户特定需求的信息系统。 信息系统的生命周期可以分为立项、开发、运维及消亡四个阶段。 系统的运行维护可分为: 1、更正性维护:更正交付后发现的错误; 2、适应性维护:使…

【第三十六节】工程与模块管理

IDEA 项目结构 层级关系&#xff1a; project&#xff08;工程&#xff09;-module&#xff08;模块&#xff09;-package(包)-class&#xff08;类&#xff09; 具体的&#xff1a; 一个project中可以创建多个module 一个module可以创建多个package 一个package中可以创…

Linux下HTTP隧道技术的应用场景与优势分析

亲爱的Linux侠们&#xff0c;今天我们来聊一聊Linux下HTTP隧道技术的应用场景与优势。在这个网络时代&#xff0c;HTTP隧道技术就如同一位神秘的“魔法师”&#xff0c;为我们解决了许多棘手的网络问题。 首先&#xff0c;让我们来看看HTTP隧道技术在哪些场景下能大展身手。 …

OpenGL学习——14.投光物_点光源

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

C++ 多起点的bfs(五十九)【第六篇】

今天我们来学习多起点的bfs 1.多起点的bfs 在普通的广度优先搜索问题中&#xff0c;为了得到从初始状态到达目标状态的最小操作数&#xff0c;则将初始状态放入队列中。离初始状态由近及远地不断扩展出新的状态&#xff0c;直到搜索到目的状态&#xff0c;或队列为空&#xff…

using--派生类引用基类成员

派生类中using前置声明使用基类成员 using可以用于在派生类中声明需要使用的基类的成员。 这种语法只能在有继承关系的类的派生类中使用&#xff0c;不能在无关的类之间使用。 因为C语法默认在一个类A中使用using引用另一个类B的成员,则A一定继承B&#xff1b;如果没有继承关…

向表中插入数据(单行/多行/插入否则更新/插入否则替换)

目录 插入单行数据 指定属性 省略属性列 多行插入 插入否则更新 格式 on duplicate key含义 不同行数的更改 示例 查看影响行数 语法 插入否则替换 格式 不同行数的更改 示例 插入单行数据 insert into 表名 ( &#xff08;属性列名) ) values (数据) 指定属…

GAN:“左右互搏”的卷积网络,不断优化性能中

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 在一个名为“卷王”的世界里&#xff0c;有一个传奇般的存在——生成对抗网络&#xff…

West-wild

信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-04 14:45 CST Nmap scan report for 192.168.1.1 Host is up (0.00063s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report …