2020年蓝桥杯模拟赛(Python)

No.1.15.125GB

【问题描述】
在计算机存储中,15.125GB是多少MB?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

15.125GB = 1024 *15.125 MB

No.3.叶结点数


【问题描述】
一棵包含有2019个结点的二叉树,最多包含多少个叶结点?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

二叉树的性质:

1.对任何一棵二叉树:度为0的结点数 = 度为2的节点数 + 1;

若此时无度为1的节点,即为满二叉树时,叶节点最多为2014,2015个度为2的节点

No.4.数字9

【问题描述】
在1至2019中,有多少个数的数位中包含数字9?
注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分
count=0
for i in range(2019):
    str1 =str(i)
    for j in str1:
        if(j=='9'):
            print(str1)
            count+=1
            continue
print(count)

No.6.递增三元组

在数列 a[1], a[2], ..., a[n] 中,如果对于下标 i, j, k 满足 0<i<j<k<n+1 且 a[i]<a[j]<a[k],则称 a[i], a[j], a[k] 为一组递增三元组,a[j]为递增三元组的中心。
给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
【输入格式】
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a[1], a[2], ..., a[n],相邻的整数间用空格分隔,表示给定的数列。
【输出格式】
输出一行包含一个整数,表示答案。
【样例输入】
5
1 2 5 3 5
【样例输出】
2
【样例说明】
a[2] 和 a[4] 可能是三元组的中心。
【评测用例规模与约定】
对于 50% 的评测用例,2 <= n <= 100,0 <= 数列中的数 <= 1000。
对于所有评测用例,2 <= n <= 1000,0 <= 数列中的数 <= 10000。

如果使用暴力的话,会导致时间复杂度太高,于是使用三个数组纪录最大值和最小值,最大值从后往前遍历,而最小值从左到右遍历,构造完成之后比较自身的值与最大值与最小值的比如,满足 最小值<n<最大值条件的可以作为中间元素

No.7正整数序列

【问题描述】
小明想知道,满足以下条件的正整数序列的数量:
1. 第一项为 n;
2. 第二项不超过 n;
3. 从第三项开始,每一项小于前两项的差的绝对值。
请计算,对于给定的 n,有多少种满足条件的序列。
【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
【样例输入】
4
【样例输出】
7
【样例说明】
以下是满足条件的序列:
4 1
4 1 1
4 1 2
4 2
4 2 1
4 3
4 4
【评测用例规模与约定】
对于 20% 的评测用例,1 <= n <= 5;
对于 50% 的评测用例,1 <= n <= 10;
对于 80% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 1000。

对于这个题目,可以使用深搜进行解决,使用一个二维数组a纪录前两个值时的种类有多少,因为没有规定位数,于是使用暴力,将每种情况都进行遍历,重要的是使用记忆化防止重复计算,使用一个数组纪录上一个使用的值.

code
n = int(input())
first = 0
last = 0
sumvalue = 0    #纪录全部的种类数
b = [[0 for i in range(n+1)] for row in range(n+1)]     #记忆化前两个的值
def dfs(x):  #功能是返回在差值为x时,first和last能够得到的序列个数
    global first,last,sumvalue
    if (x <= 1):
        return 1  # 如果不能在搜索了
    if (b[first][last] != 0):
        return b[first][last]  
    temp1 = last
    temp2 = sumvalue  #纪录
    for j in range(1,x):
        first = temp1
        last = j
        temp = sumvalue  #纪录下没有变化的值
        sumvalue+=dfs(abs(first-last)) #一直搜到底,算出第三个数取值情况,即(last,j)
        b[first][last] = (sumvalue-temp) #存储
    return sumvalue-temp2    #

sumvalue =0
for i in range(1,n+1):         #从第一个开始遍历
    first = n
    last = i
    sumvalue+=1
    dfs(abs(first-last))  #用于遍历,不相加是因为函数里面已经相加
print(sumvalue)

**No.10.晚会节目单 **

小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。
这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。
小明发现,观众对于晚上的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。
小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个节目,满足他的要求。
【输入格式】
输入的第一行包含两个整数 n, m ,表示节目的数量和要选择的数量。
第二行包含 n 个整数,依次为每个节目的好看值。
【输出格式】
输出一行包含 m 个整数,为选出的节目的好看值。
【样例输入】
5 3
3 1 2 5 4
【样例输出】
3 5 4
【样例说明】
选择了第1, 4, 5个节目。
【评测用例规模与约定】
对于 30% 的评测用例,1 <= n <= 20;
对于 60% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 100000,0 <= 节目的好看值 <= 100000。

题目意思就是需要找出前面最大的m个节目,于是只需要首先找到前m个好看的节目,然后按顺序输出即可

n,m =map(int,input().split())
a = [int(n) for n in input().split()]
b =a.copy()
b.sort(reverse=True)
b = b[:m]
for i in a:
    if i in b:
        print(i,end=' ')
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值