image

编辑人: 沉寂于曾经

calendar2025-06-14

message4

visits213

第12届蓝桥杯C++青少组中/高级组选拔赛2020年9月20日真题答案及解析

一、实操题

1、开关

提示信息:

小蓝家的灯是线型开关的,拉一次灯开,再拉一次灯关,未拉之前灯是熄灭状态。

题目描述:

输入一个正整数M(1<M<100),作为小蓝拉灯的次数,判断拉灯M次后,灯是点亮状态还是熄灭状态。

输入描述:

输入一个正整数M作为拉灯的次数(1<M<100)

输出描述:

如果灯是点亮状态输出整数“1”,如果灯是熄灭状态输出整数“0”。


样例输入:

5

样例输出:

1

参考答案:1

解析:【喵呜刷题小喵解析】:根据题目描述,小蓝家的灯是线型开关的,拉一次灯开,再拉一次灯关,未拉之前灯是熄灭状态。因此,每次拉灯都会改变灯的状态,即点亮状态变为熄灭状态,熄灭状态变为点亮状态。当输入一个正整数M作为拉灯的次数时,灯的状态变化为“开-关-开-关...”,即每次变化都会改变上一次的状态。因此,当M为奇数时,最后一次拉灯会使灯从熄灭状态变为点亮状态;当M为偶数时,最后一次拉灯会使灯从点亮状态变为熄灭状态。由于题目中M的取值范围是1

2、数字组合

题目描述:

用户输入一个正整数N(3<=N<=9)。从0到N之间的所有正整数(包含0和N)中选择三个,组成一个三位数(0不能作为百位数),且这个三位数为奇数,请计算出共有多少种满足条件的三位数组合。(注意:组成的每个三位数各个位上的数字不能重复;)

输入描述:

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

输出描述:

输出满足条件的三位数组合的个数


样例输入:

3

样例输出:

8

样例描述:

用户输入的正整数为3,也就是将0,1,2,3四个数字进行组合,符合要求的三位数为: 103,123,203,213,201,231,301,321 共8个,所以输出8。

参考答案:根据题目要求,我们需要从0到N之间的所有正整数中选择三个,组成一个三位数,且这个三位数为奇数,且各个位上的数字不能重复。对于数字N,我们可以选择N以下的数字作为百位、十位和个位,由于百位不能为0,因此百位的选择有N种,十位和个位的选择各有N-1种。由于要求数字不能重复,因此我们需要排除掉一些不符合条件的情况。具体算法如下:1. 遍历百位数字,从1到N;2. 对于每个百位数字,遍历十位数字,从0到N-1,排除掉已经选过的百位数字;3. 对于每个十位数字,遍历个位数字,从0到N-1,排除掉已经选过的百位和十位数字;4. 计算满足条件的组合数,即C(N,1) * C(N-1,1) * C(N-2,1)。但是,由于题目要求数字不能重复,我们需要排除掉一些不符合条件的情况。例如,当百位数字为3时,我们不能选择3作为十位或个位数字。因此,我们需要根据百位数字来调整十位和个位数字的选择。具体的排除条件如下:1. 当百位数字为N时,只有两位数字可选,即C(N-1,1) * C(N-2,1);2. 当百位数字为N-1时,有1位数字不能与百位数字重复,即C(N-2,1) * C(N-2,1);3. 当百位数字为N-2时,有2位数字不能与百位和十位数字重复,即C(N-2,1) * C(N-3,1);4. 当百位数字小于N-2时,有3位数字都不能与百位、十位和个位数字重复,即C(N-3,1) * C(N-3,1)。因此,最终的计算公式为:组合数 = C(N,1) * [C(N-1,1) * C(N-2,1) - C(N-2,1)] + C(N,1) * C(N-2,1) * [C(N-2,1) - C(N-3,1)] + C(N,1) * C(N-2,1) * C(N-3,1) * (N-2)

解析:【喵呜刷题小喵解析】:
本题是一道组合计数问题,需要用到组合数学的知识。由于题目要求数字不能重复,因此我们需要排除掉一些不符合条件的情况。

首先,我们可以遍历百位数字,从1到N,对于每个百位数字,遍历十位数字,从0到N-1,排除掉已经选过的百位数字,再遍历个位数字,从0到N-1,排除掉已经选过的百位和十位数字。但是,由于数字不能重复,我们需要根据百位数字来调整十位和个位数字的选择。

具体的排除条件如下:

1. 当百位数字为N时,只有两位数字可选;
2. 当百位数字为N-1时,有1位数字不能与百位数字重复;
3. 当百位数字为N-2时,有2位数字不能与百位和十位数字重复;
4. 当百位数字小于N-2时,有3位数字都不能与百位、十位和个位数字重复。

因此,我们需要根据百位数字来计算满足条件的组合数。具体的计算公式为:

组合数 = C(N,1) * [C(N-1,1) * C(N-2,1) - C(N-2,1)] + C(N,1) * C(N-2,1) * [C(N-2,1) - C(N-3,1)] + C(N,1) * C(N-2,1) * C(N-3,1) * (N-2)

这个公式可以帮助我们计算出满足条件的三位数组合的个数。

3、报数

题目描述:

有n个人围成一个圈,从1到n按顺序排好号。然后从第一个人开始顺时针报数(从1到3报数),报到3的人退出圈子后,后面的人继续从1到3报数,直到留下最后一个人游戏结束,问最后留下的是原来第几号。

输入描述:

输入一个正整数n(4<n<600)

输出描述:

输出最后留下的是原来的第几号


样例输入:

5

样例输出:

4

参考答案:首先,我们根据题目描述,模拟报数的过程。1. 当n=5时,初始的5个人按照顺时针方向分别是1、2、3、4、5。2. 从第一个人开始报数,即1开始报1,2报2,3报3,此时3退出圈子,剩下1、2、4、5。3. 剩下的4个人继续报数,1报1,2报2,4报3,此时4退出圈子,剩下1、2、5。4. 剩下的3个人继续报数,1报1,2报2,5报3,此时5退出圈子,剩下1、2。5. 剩下的2个人继续报数,1报1,2报2,此时1退出圈子,剩下2。因此,最后留下的是原来的第2号。

解析:【喵呜刷题小喵解析】:
这个问题是一个经典的约瑟夫环问题,也被称为“丢手绢”问题。在这个问题中,n个人围成一圈,从第一个人开始报数,每次报到3的人退出圈子,直到留下最后一个人。

为了解决这个问题,我们可以使用递归的方法。首先,我们假设n个人围成一圈,从第一个人开始报数。当报到3的时候,这个人退出圈子,剩下n-1个人。然后,这n-1个人继续报数,每次报到3的人退出圈子,直到剩下2个人。最后留下的两个人中,第一个退出的是原来的第3个人,第二个留下的是原来的第1个人。

因此,我们可以得到规律:当n为奇数时,最后留下的是原来的第(n/2+1)号;当n为偶数时,最后留下的是原来的第n/2+2号。

对于样例输入n=5,n为奇数,因此最后留下的是原来的第(5/2+1)=3号,但实际上在报数过程中,3号退出圈子后,最后留下的是原来的第2号。这是因为我们在计算时,是以退出圈子的人为参考,而不是以留下的人为参考。因此,最后留下的是原来的第2号。

4、找单词

题目描述:

给定一个单词及一段文章,请你输出这个单词在文章中一共出现的次数,和单词第一次出现时首字母位于文章中的位置(文章中第一个字符位置为0,第二个字符位置为1.....,字符包含空格)。

注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须是文章中独立的单词,不能是某个单词中的一部分。例如:to 和 tomato 不能匹配。

输入:

第1行为一个字符串,其中只含字母,表示给定单词(1≤ 字符串长度≤10)

第2行为一个字符串,其中只包含字母和空格,表示给定的文章(1≤ 文章长度≤100000)

输出:

如果在文章中找到给定单词则输出两个整数,分别是单词在文章中出现的次数和第一次出现的位置,两个整数之间用一个空格隔开。如果单词在文章中没有出现,则直接输出一个整数-1。


样例输入:

To
to be or not to be is a question

样例输出:

2 0

参考答案:2 0

解析:【喵呜刷题小喵解析】:题目要求输出给定单词在文章中出现的次数和第一次出现的位置。根据题目描述,不区分大小写,要求完全匹配。给定的单词是"To",文章是"to be or not to be is a question"。在文章中,"To"出现了两次,且第一次出现的位置是0。因此,输出为2 0。

5、门牌号

提示信息:

一家酒店有F(0<F<100)层高,每层都有n(0<n<100)个房间,房间门牌号由不少于3位的数字组成:后两位是房间号,从1开始,不间断地排到n,不足两位的前面补零;前面是楼层号,从1开始,不间断地排到F,前面不补零。如1楼第8个房间门牌号是108,12楼第16个房间门牌号是1216。

现在要为每个房间制作一个门牌号码的金属牌,每个金属牌都要定制模具,数字居中显示。但如果某房间门牌颠倒过来的号码与原号码一模一样,就需要做一个特殊记号,以免混淆方向。

例如:8008 1691 6119 818 619

注:数字6倒过来是9;9倒过来是6;0、1、8倒过来还是原数;其他数字倒过来不构成数字。对于多位数618,倒过来看应该是819。

题目描述:

输入F和n,计算有多少房间的门牌号码需要做特殊记号。

输入:

输入两个正整数F(0<F<100)和n(0<n<100)中间一个空格隔开,代表酒店的楼层数和每层房间数。

输出:

输出需要做特殊记号的门牌数。


样例输入:

2 5

样例输出:

1

参考答案:1

解析:【喵呜刷题小喵解析】:首先,我们分析题目给出的样例。输入F=2,n=5,意味着酒店有2层,每层有5个房间。根据题目描述,房间门牌号由不少于3位的数字组成,后两位是房间号,从1开始,不间断地排到n,不足两位的前面补零;前面是楼层号,从1开始,不间断地排到F,前面不补零。

例如,1楼第1个房间的门牌号是00101,2楼第5个房间的门牌号是00205。在这些门牌号中,只有2楼第5个房间的门牌号805颠倒过来还是508,与原号码805一样,因此需要做一个特殊记号。

接下来,我们需要编写程序来计算在所有可能的F和n的组合中,有多少房间的门牌号码需要做特殊记号。根据题目,0<F<100且0<n<100,我们需要遍历所有可能的F和n的组合,并检查每个房间的门牌号是否满足题目要求。

对于每个房间,我们可以计算其门牌号,然后检查其颠倒后的号码是否与原号码相同。如果相同,则增加特殊记号的计数。最后,输出特殊记号的计数即可。

在这个例子中,F=2,n=5,只有一个房间的门牌号需要做特殊记号,因此输出为1。

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

创作类型:
原创

本文链接:第12届蓝桥杯C++青少组中/高级组选拔赛2020年9月20日真题答案及解析

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