image

编辑人: 流年絮语

calendar2025-05-17

message3

visits596

第12届蓝桥杯C++青少组中/高级组省赛2021年真题参考答案

一、单选题

1、下列符号中哪个在C++中表示行注释(  )。

A、

!

B、

#

C ]

D //


2、每个C++程序都必须有且仅有一个 (   )

A 函数

B、

预处理命令

C、

主函数

D 语句


3、下列字特串中不可以用作C++变量名称的是(  )

A str123

B、

int

C、

_6666

D name


4、二进制加法10010100+110010的和为(  )

A 11000110

B、

10100110

C、

10110110

D 11100110


5、对于int *pa[5];的描述中,正确的是( )。

A pa是一个指向数组的指针,所指向的数组是5个int型元素

B pa是一个指向某数组中第5个元素的指针,该元素是int型变量

C pa[5]表示数组的第5个元素的值,是int型的值

D pa是一个具有5个元素的指针数组,每个元素是一个int型指针


二、实操题

6、整除

题目描述:

输入一个正整数N(N<100),输出1到N(包含1和N)之间所有可以被7整除的正整数,且输出的正整数之间以一个空格隔开。

输入描述

输入一个正整数N(N<100)

输出描述

输出可以被7整除的正整数,且输出的正整数之间以一个空格隔开


样例输入

15

样例输出

7 14

参考答案:br />7 14


7、求和

提示信息:

有一堆砖,需要按照一定规律进行堆放,具体堆放规律如下:

顶层放1块砖,第二层放3块砖,第三层放6块砖,第四层放10块砖,依此类推,每一层砖块的数量为上一层砖块数量加上本层的层数。

例如第五层为10+5=15。

输入砖块堆放的总层数,按照以上规律,求出砖块的总数。

题目描述:

输入一个正整数N(3<N<1000)作为砖块堆放的总层数,按照“提示信息”中的堆放规律,输出砖块的总数。

例如:输入为3,总层数为3层的砖块堆放一共有1+3+6=10块砖,则输出10。

输入描述

输入一个正整数N(3<N<1000)

输出描述

输出砖块的总数


样例输入

3

样例输出

10


参考答案:对于每一层砖块的数量,我们可以使用等差数列的求和公式来计算。设首项为a1=1,公差为d=层数,项数为n,则等差数列的前n项和Sn可以用以下公式计算:Sn = n/2 * (2a1 + (n-1)d)将a1=1,d=层数,n=总层数代入公式,即可得到砖块的总数。


8、排序

提示信息:

有N个瓶子,编号为从1到N,这N个瓶子乱序排成一排。现在想对瓶子进行从小到大排列,要求每次拿出2个瓶子进行互换,经过若干次互换后,使得瓶子按编号从小到大排序,但这样的互换方式有多种,每种互换方式的互换次数也不相同。请你通过编程计算出最少经过几次互换可以使瓶子按编号从小到大排序。

题目描述

第一行输入瓶子的个数N(2<N<100),第二行输入目前瓶子编号的排序情况,输出最少经过几次互换可以使瓶子按编号从小到大排序。

例如第一行输入的N为5,第二行输入N个正整数为21354,第一次拿出2和1进行互换,第二次拿出5和4进行互换,最少需要两次互换。

输入描述

第一行输入一个正整数N表示瓶子的个数(2<N<100)

第二行输入N个正整数,之间用一个空格分开,表示瓶子编号目前的排序情况

输出描述

输出最少经过几次互换可以使瓶子按编号从小到大排序


样例输入

5
2 1 3 5 4

样例输出

2


参考答案:根据题目描述,我们需要对瓶子进行排序,每次可以拿出两个瓶子进行互换,我们需要找出最少需要多少次互换才能使得瓶子按编号从小到大排序。为了解决这个问题,我们可以使用一种称为“冒泡排序”的算法。冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。在这个问题中,我们可以将每次遍历看作一次“冒泡”,每次“冒泡”中,如果有需要交换的元素,就进行一次互换。因此,最少需要多少次互换就能使得瓶子按编号从小到大排序,就等于最少需要多少次“冒泡”才能使得数列排序完成。所以,我们可以按照冒泡排序的思路,遍历一次数列,如果有需要交换的元素就进行交换,记录需要交换的次数。遍历完成后,输出交换次数即为最少需要多少次互换才能使瓶子按编号从小到大排序。


9、推算

提示信息:

小蓝是一名计算机极客,他在记录一些重要的日子时从不注明年月日,而是用一个整数替代,比如4532,后来人们知道,那个整数就是日期,这个整数表示的日期就是他出生后的第几天。

他出生于:1999-04-30

例如他的日记里记录着获得蓝桥杯国寒总冠军的日子为7856这个整数,可以推断出这一天是2020-10-31,现在需要请你计算出小蓝日记中其他整数对应的日期。

注意:输出的日期格式:yyyy-mm-dd,如:2020-03-21(月和日小于10的需要在月和日前补0)

题目描述:

输入一个整数n(5<n<30000)作为日记中记录的整数,输出这个整数对应的日期(注:按日期格式输出)。

例如:1999-04-30为第1天,1999-05-01为第2天。

输入描述

输入一个正整数n(5<n<30000)

输出描述

输出这个整数对应的日期


样例输入

10

样例输出

1999-05-09


参考答案:根据给定的提示信息,小蓝出生于1999年4月30日,即第1天。因此,我们可以通过输入的整数n计算出对应的日期。具体步骤如下:1. 计算n-1天是多少天之前,即n-1天之前是哪一天。2. 将那一天加上小蓝的出生日期(1999年4月30日),得到对应的日期。以样例输入10为例,10-1=9,即9天之前是哪一天。由于小蓝出生于1999年4月30日,所以9天之前就是1999年4月21日。因此,样例输出为1999-05-09,这是错误的。正确的输出应该是1999-04-21。


10、可逆素数

提示信息:

素数:素数就是质数,是一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。也就是说,除了1和该数本身以外不再有其他的因数的数被称为素数。最小的素数是2,1不是素数。可逆素数:是将一个素数的各个位置的数字顺序倒过来构成的反序数仍是素数。

例如:2,13,167顺序或者反序都是素数

题目描述:

输入一个正整故N(2<=N<10001),输出2到N(包含2和N)之间共有多少个可逆素数。

例如2到15之间共有6个可逆素数,分别为2,3,5,7,11,13

输入描述

输入一个正整数N(2≤N<10001)

输出描述

输出2到N(包含2和N)之间共有多少个可逆素数


样例输入

15

样例输出

6


参考答案:输入一个正整数N,输出2到N之间共有多少个可逆素数。


11、满二叉树:一棵二叉树,如果每一层的节点数都达到最大值,则这个二叉树就是满二叉树。即如果一棵二叉树的层数为K,且结点总数是(2^k)-1,那么它就是满二叉树。

完全二叉树:一棵深度为K的二叉树,除第K层外,其他各层(1至k-1层)的节点数都达到最大值,目第K层的所有节点都连续集中在左边,那么它就是完全二叉树。

节点:包含一个数据元素及若干指向子树分支的信息。

权值:对节点赋予的有意义的数量值。

深度:也被称为树的高度,树中所有节点的层次最大值称为树的深度,例如下图中的二叉树深度都为4。

编程实现:

给出一棵包含n个节点的完全二叉树,节点按照从上到下、从左到右的顺序依次排序,每个节点上都有一个权值,如下图现在需要将同一深度节点的权值加在一起,然后比较每个深度的权值之和,输出权值之和最大的深度值。如果有多个深度的权值之和相同,则输出其中最小的深度(如:深度2权值之和为5,深度3权值之和也为5,则输出2)。

注:根的深度为1

第一行输入完全二叉树节点的总数量n(5<n<101),第二行输入n个正整数作为每个节点的权值。输出权值之和最大的深度值(如果有多个深度的权值之和相同则输出其中最小的深度值)。

例如:上图的二叉树,第一行输入为6,第二行输入为1 5 6 1 2 3。深度1的权值之和为1,深度2的权值之和为11,深度3的权值之和为6。其中深度2的权值之和最大,则输出2。

输入描述

第一行输入一个正整数n(5<n<101)作为节点的总数量

第二行输入n个正整数,且n个正整数之间以一个空格隔开

输出描述

输出权值之和最大的深度值


样例输入1

6
1 5 6 1 2 3

样例输出1

2

样例输入2

8
1 5 6 1 2 3 4 100

样例输出2

4


参考答案:首先,根据题目要求,需要构建一个完全二叉树,并根据节点数量计算出树的深度。然后,从根节点开始,逐层遍历二叉树,计算每层节点的权值之和,并找到权值之和最大的深度。


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:第12届蓝桥杯C++青少组中/高级组省赛2021年真题参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share