2018年第九届C/C++ A组蓝桥杯省赛真题

第一题:哪天返回

题目描述

小明被不明势力劫持。后莫名其妙被扔到x星站再无问津。小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文。
他决定在x星战打工。好心的老板答应包食宿,第1天给他1元钱。 并且,以后的每一天都比前一天多2元钱,直到他有足够的钱买票。
请计算一下,小明在第几天就能凑够108元,返回地球。

要求提交的是一个整数,表示第几天。请不要提交任何多余的内容。

money = 1
sum = 0
day = 1
while True:
    if sum >= 108:
        print(day)
        break
    money += 2
    sum += money
    day += 1

答案:11

第二题:猴子分香蕉

题目描述

5只猴子是好朋友,在海边的椰子树上睡着了。这期间,有商船把一大堆香蕉忘记在沙滩上离去。
第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉。
第2只猴子醒来,重新把香蕉均分成5堆,还剩下2个,就吃掉并把自己的一份藏起来继续睡觉。
第3只猴子醒来,重新把香蕉均分成5堆,还剩下3个,就吃掉并把自己的一份藏起来继续睡觉。
第4只猴子醒来,重新把香蕉均分成5堆,还剩下4个,就吃掉并把自己的一份藏起来继续睡觉。
第5只猴子醒来,重新把香蕉均分成5堆,哈哈,正好不剩!

请计算一开始最少有多少个香蕉。

需要提交的是一个整数,不要填写任何多余的内容。

for i in range(10000):
    i1 = i
    if i % 5 == 1:
        a = i // 5
        i = i - 1 - a
        if i % 5 == 2:
            a = i // 5
            i = i - 2 - a
            if i % 5 == 3:
                a = i // 5
                i = i - 3 - a
                if i % 5 == 4:
                    a = i // 5
                    i = i - 4 - a
                    if i % 5 == 0:
                        print(i1)

答案: 3141 一开始会有一个16,经验证16不满足条件所以排除

第三题:字母阵列

题目描述

仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:“LANQIAO”。
SLANQIAO
ZOEXCCGB
MOAYWKHI
BCCIPLJQ
SLANQIAO
RSFWFNYA
XIFZVWAL
COAIQNAL

我们约定: 序列可以水平,垂直,或者是斜向; 并且走向不限(实际上就是有一共8种方向)。
上图中一共有4个满足要求的串。

下面有一个更大的(100x100)的字母方阵。 你能算出其中隐藏了多少个“LANQIAO”吗?

第四题:第几个幸运数

题目描述

到x星球旅行的游客都被发给一个整数,作为游客编号。 x星的国王有个怪癖,他只喜欢数字3,5和7。
国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。

我们来看前10个幸运数字是: 3 5 7 9 15 21 25 27 35 45
因而第11个幸运数字是:49

小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。

请你帮小明计算一下,59084709587505是第几个幸运数字。

需要提交的是一个整数,请不要填写任何多余内容。

n = 59084709587505
sum = 0
for i in range(100):
    for j in range(100):
        for k in range(100):
            if (3**i)*(5**j)*(7**k) < n:
                sum += 1
            else:
                break
print(sum)

答案: 1905

第五题:书号验证

第六题:稍小分数

第七题:次数差

题目描述

x星球有26只球队,分别用a~z的26个字母代表。他们总是不停地比赛。
在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)

输入,一个串,表示球队获胜情况(保证串的长度<1000)

要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。

比如: 输入: abaabcaa

则程序应该输出: 4

解释:a出现5次,最多;c出现1次,最少。5-1=4

再比如: 输入: bbccccddaaaacccc

程序应该输出: 6

资源约定: 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 1000ms

strs = input()
lis = set(strs)
num = []
for li in lis:
    num.append(strs.count(li))
num.sort()
print(num[-1]-num[0])

第八题:等腰三角形题目描述

题目描述

本题目要求你在控制台输出一个由数字组成的等腰三角形。 具体的步骤是:

先用1,2,3,…的自然数拼一个足够长的串 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。 比如,当三角形高度是8时:
在这里插入图片描述

n = int(input())
len = 0
a = [0] * 1000005
for i in range(10005):
    tmp = i
    temp = [0] * 1005
    l = 0
    while tmp:
        temp[l] = tmp % 10
        tmp = tmp // 10
        l += 1
    for j in range(l-1, -1, -1):
        a[len] = temp[j]
        len += 1
    if len >= 4*n-4:
        break
for i in range(n-1):
    print('.', end='')
print(a[0])
for i in range(1, n-1):
    for j in range(n-i-2, -1, -1):
        print('.', end='')
    print(a[i], end='')
    for k in range(2*i-1):
        print('.', end='')
    print(a[4*n-4-i])
for i in range(n-1, 3*n-2):
    print(a[i], end='')

第九题:小朋友崇拜圈

题目描述

班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。 在一个游戏中,需要小朋友坐一个圈,
每个小朋友都有自己最崇拜的小朋友在他的右手边。 求满足条件的圈最大多少人?

小朋友编号为1,2,3,…N 输入第一行,一个整数N(3<N<100000) 接下来一行N个整数,由空格分开。

要求输出一个整数,表示满足条件的最大圈的人数。

例如: 输入:
9
3 4 2 5 3 8 4 6 9

则程序应该输出: 4
解释: 如图p1.png所示,崇拜关系用箭头表示,红色表示不在圈中。 显然,最大圈是[2 4 5 3] 构成的圈
在这里插入图片描述
再例如:
输入: 30
22 28 16 6 27 21 30 1 29 10 9 14 24 11 7 2 8 5 26 4 12 3 25 18 20 19 23 17 13 15

程序应该输出: 16
资源约定: 峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

n = int(input())
nums = list(map(int, input().split(' ')))
li = []
for i in range(n):
    a = i
    sum = 0
    for j in range(n+1):
        sum += 1
        i = nums[i] - 1
        if i == a:
            break
    li.append(sum)
res = []
for i in li:
    if i < n:
        res.append(i)
print(max(res))

第十题:耐摔指数

题目描述
x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。
各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。

x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。

如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。
特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。
如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n

为了减少测试次数,从每个厂家抽样3部手机参加测试。

如果已知了测试塔的高度,并且采用最佳策略,在最坏的运气下最多需要测试多少次才能确定手机的耐摔指数呢?

输入数据,一个整数n(3<n<10000),表示测试塔的高度。
输出一个整数,表示最多测试多少次。

例如:
输入:
3

程序应该输出:
2

解释:
手机a从2楼扔下去,坏了,就把b手机从1楼扔;否则a手机继续3层扔下

再例如:
输入:
7

程序应该输出:
3

解释:
a手机从4层扔,坏了,则下面有3层,b,c 两部手机2次足可以测出指数;
若是没坏,手机充足,上面5,6,7 三层2次也容易测出。

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写代码的嘤嘤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值