试题 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)