第十届蓝桥杯2019年C/C++ 大学B组省赛试题 部分题目 python解法

试题 A:组队

本题总分:5分

【问题描述】
作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员,
组成球队的首发阵容。
每位球员担任 1号位至 5号位时的评分如下表所示。请你计算首发阵容 1
号位至5号位的评分之和最大可能是多少?
在这里插入图片描述
结果:490

a = [97, 92, 0, 0, 89, 82, 0, 0, 0, 95, 0, 0, 94, 0, 0, 0, 98, 93, 0, 0]
b = [90, 85, 0, 0, 83, 86, 0, 97, 0, 99, 0, 0, 91, 83, 0, 0, 83, 87, 0, 99]
c = [0, 96, 0, 0, 97, 0, 0, 96, 89, 0, 96, 0, 0, 87, 98, 0, 99, 92, 0, 96]
d = [0, 0, 0, 80, 0, 0, 87, 0, 0, 0, 97, 93, 0, 0, 97, 93, 98, 96, 89, 95]
e = [0, 0, 93, 86, 0, 0, 90, 0, 0, 0, 0, 98, 0, 0, 98, 86, 81, 98, 92, 81]

from itertools import permutations
lis = permutations(list(range(20)), 5)

ans = 0
for i in lis:
    ans = max(ans, sum([a[i[0]], b[i[1]], c[i[2]], d[i[3]], e[i[4]]]))
print(ans)

试题 B:年号字串

本题总分:5分

【问题描述】
小明用字母 A对应数字 1,B对应 2,以此类推,用 Z对应 26。对于 27
以上的数字,小明用两位或更长位的字符串来对应,例如 AA对应27,AB对
应28,AZ对应52,LQ对应329。
请问2019对应的字符串是什么?

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个大写英文字符串,在提交答案时只填写这个字符串,注意全部大写,填写多
余的内容将无法得分。

结果:BYQ

lis = [0, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
      'W', 'X', 'Y', 'Z']
num = 2019

a = (num // 26) // 26  
b = num // 26 - a * 26
c = num % 26

print(lis[a] + lis[b] + lis[c])

试题 C:数列求值

本题总分:10分

【问题描述】
给定数列1,1,1,3,5,9,17,…,从第4项开始,每项都是前3项的和。求
第20190324项的最后4位数字。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个4位整数(提示:答案的千位不为0),在提交答案时只填写这个整数,填写
多余的内容将无法得分。

结果:4659

lis = [1, 1, 1]
for i in range(20190324-3):
    s = sum(lis[-3:])
    if s > 10000:
        lis.append(s % 10000)
    else:
        lis.append(s)
print(lis[-1])

试题 D:数的分解

本题总分:10分

【问题描述】
把 2019分解成 3个各不相同的正整数之和,并且要求每个正整数都不包
含数字2和4,一共有多少种不同的分解方法?
注意交换 3个整数的顺序被视为同一种方法,例如 1000+1001+18和
1001+1000+18被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

结果:40785

def check(n):
    if '2' not in str(n) and '4' not in str(n):
        return True
    else: return False

ans = 0
for i in range(1,2019):
    if check(i):
        for j in range(1,2019):
            if i != j and check(j):
                k = 2019-i-j
                if k > 0 and k != i and k != j and check(k):
                    ans += 1
print(ans // 6)

试题 F:特别数的和

时间限制: 1.0s内存限制: 256.0MB本题总分:15分

【问题描述】
小明对数位中含有 2、0、1、9的数字很感兴趣(不包括前导 0),在1到
40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。
请问,在1到n中,所有这样的数的和是多少?
【输入格式】
输入一行包含两个整数n。
【输出格式】
输出一行,包含一个整数,表示满足条件的数的和。
【样例输入】
40
【样例输出】
574
【评测用例规模与约定】
对于20%的评测用例,1≤n≤10。
对于50%的评测用例,1≤n≤100。
对于80%的评测用例,1≤n≤1000。
对于所有评测用例,1≤n≤10000。

def check(n):
    for i in ['2', '0', '1', '9']:
        if i in str(n):
            return True
    return False

n = 40
ans = 0
for i in range(1, n + 1):
    if check(i):
        ans += i
print(ans)

试题G:完全二叉树的权值

在这里插入图片描述

import math

n = 7
lis = [1, 6, 5, 4, 3, 2, 1]
ceng = math.ceil(math.log(n,2)) 

ans = [] 
for i in range(1,ceng):
        ans.append(sum(lis[2 ** (i - 1) - 1:2 ** i - 1]))
ans.append(sum(lis[2 ** (ceng) - 1:]))  #最后一层

print(ans.index(max(ans)) + 1)

试题 H:等差数列

时间限制: 1.0s内存限制: 256.0MB本题总分:20分

【问题描述】
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一
部分的数列,只记得其中N个整数。
现在给出这 N个整数,小明想知道包含这 N个整数的最短的等差数列有
几项?
【输入格式】
输入的第一行包含一个整数N。
第二行包含 N个整数 A1,A2,···,AN。(注意 A1 ∼AN并不一定是按等差数
列中的顺序给出)
【输出格式】
输出一个整数表示答案。
【样例输入】
5
2641020
【样例输出】
10
【样例说明】
包含2、6、4、10、20的最短的等差数列是2、4、6、8、10、12、14、16、
18、20。
【评测用例规模与约定】
对于所有评测用例,2≤N≤100000

lis = [2, 6, 4, 10, 20]

lis.sort()
sub = [lis[i] - lis[i - 1] for i in range(1, len(lis))]

def hcf(a,b):
    if a>b:
        a,b=b,a
    for i in range(2,a+1):
        if a%i==0 and b%i==0:
            return i
    return 1

h = []
for i in range(len(sub)):
    for j in range(i, len(sub)):
        h.append(hcf(sub[i], sub[j]))
h.sort()

print((lis[-1] - lis[0]) / h[0] + 1)
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值