蓝桥杯真题训练7

蓝桥杯真题训练

1-完全二叉树的权值

给定一棵包含 NN 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是 A_1, A_2, ··· A_NA

​如下图所示:

在这里插入图片描述

现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。

注:根的深度是 1。

输入描述
第一行包含一个整数 N(1 \leq N \leq 10^5)N(1≤N≤10 5

第二行包含 NN 个整数 A_1, A_2, ··· A_N (−10^5 \leq A_i \leq 10^5)A

输出描述
输出一个整数代表答案。

import math
n = int(input())
m = list(map(int,input().split()))
a = []
b = 0
k = 0
while(b<n):
  p = 0
  c = pow(2,k)
  for i in m[b:b+c]:
      p = p + i
  a.append(p)
  b = b + c
  k = k + 1
print(a.index(max(a))+1)

解题思路:利用2的n次幂进行对一行数字的切割成不同组再求和,用max选出最大,用list.index()选出第一个max的序号。

2-卡片

小蓝有很多数字卡片,每张卡片上都是数字 00到 9。 小蓝准备用这些卡片来拼一些数,他想从 11 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 11 拼到多少。 例如,当小蓝有 30 张卡片,其中 0 到 9各 3 张,则小蓝可以拼出 1 到 10, 但是拼 11时卡片 1 已经只有一张了,不够拼出 11。 现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少? 提示:建议使用计算机编程解决问题

a = [2021,2021,2021,2021,2021,2021,2021,2021,2021,2021]
b = ['0','1','2','3','4','5','6','7','8','9']
for i in range(20200):
    for j in str(i):
        if(j in b):
            if(a[int(j)]==0):
                print(i-1)
                exit()
            else:
               a[int(j)] = a[int(j)] - 1

解题思路:这题很简单,就是利用列表中各个数字的数量,直到有个数字的数量等于0。

3-最大降雨量

由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。

这个法术需要用到他手中的 49张法术符,上面分别写着 1 至 49 这 49 个数字。法术一共持续 7 周,每天小明都要使用一张法术符,法术符不能重复使用。

每周,小明施展法术产生的能量为这周 7张法术符上数字的中位数。法术 施展完 7 周后,求雨将获得成功,降雨量为 77周能量的中位数。

由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少?

print(34)

解题思路:这个题也很简单,数学问题,尽量考虑把7个数字中的后四位考虑大一点,数字差为4。

4-日期问题

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。

更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

x,y,z=map(int,input().split('/'))
ans=[]
mon=[0,31,28,31,30,31,30,31,31,30,31,30,31]
def run(x):
    if x%4==0 and x%100:return True
    if x%100==0 and x%400==0:return True
    return False
def check(x,y,z):
    if x<60:xx=2000+x
    else:xx=1900+x
    if run(xx):
        mon[2]+=1
        if z<=mon[y]:ans.append((xx,y,z))
        mon[2]-=1
    else:
        if z<=mon[y]:ans.append((xx,y,z))
#nyr
if  0<y<=12 and 0<z<=31:check(x,y,z)
#yrn
if 0<x<=12 and 0<y<=31:check(z,x,y)
#ryn
if 0<y<=12 and 0<x<=31:check(z,y,x)
ans.sort()
ans=list(dict.fromkeys(ans))
for x in ans:
    print("{:04}-{:02}-{:02}".format(x[0],x[1],x[2]))

解题思路:这里用了whoamiqwq的代码,这道题主要是注意日期的规律和规则,这里作者用列表放入一般年的每个月的日期期限,遇到闰年的时候临时讲列表中2月的28变成29,但是后面又是-1变回去。并且这里,作者用ans=list(dict.fromkeys(ans))来解决列表中重复的元素。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值