第14届蓝桥杯Python青少组中/高级选拔赛(STEMA)2022年11月真题
题目一、增加10
题目描述
(注input()输入函数的括号中不允许添加任何信息)
输入一个整数N (-100<N<100),输出N+10的结果。 例如: N=5,5+10的结果为15(15=5+10)
输入
输入一个整数N (-100≤N<100)
输出
输出一个整数,表示N+10的结果
样例输入
5
样例输出
15
【参考答案】
n = int(input())
print(n+10)
题目二、统计字符个数
题目描述
第二题 (注input()输入函数的括号中不允许添加任何信息)
输入一个包含字符“a’的字符串 (字符串长度小于1000),输出字符串中字符“a’的个数。
输入
输入一个包含字符a’的字符串
输出
输出一个整数,表示字符串中字符“a’的个数
样例输入
ab!a
样例输出
2
【知识点】: 字符串的count()方法
【参考答案】
s = input()
print(s.count('a'))
题目三、巧分胡萝卜
题目描述
第三题 (注input()输入函数的括号中不允许添加任何信息
现将N(3≤N<600)根胡萝卜全部分配给黑、白、灰三只兔子
分配规则如下:
1)黑、白、灰三只兔子必须都能分到胡萝卜;
2)黑兔子的胡萝卜数大于或等于白兔子的胡萝卜数
3)白兔子的胡萝卜数大于或等于灰兔子的胡萝卜数
请按照规则计算,将N根胡萝卜全部分配给三只免子,共有多少种不同的分配方法。
例如: N=8,按照分配规则有5种不同的分配方法 具体分配方法如下图:
输入
输入一个正整数N(3≤N≤600),表示胡萝卜的数量
输出
输出一个整数,表示将N根胡萝卜全部分配给三只兔子,共有多少种不同的分配方法
样例输入
8
样例输出
5
【解法一】 枚举
规则:黑>=白>=灰>0
思路:双层循环,i是黑兔子的胡萝卜数量,j是白兔子的胡萝卜数量,n-i-j是灰兔子的胡萝卜数量
【参考答案】
n = int(input())
s = 0
for i in range(n+1):
for j in range(n+1):
if i>=j and j>=n-i-j and n-i-j>0:#判断分配方法是否符合要求
s += 1
print(s)
题目四、业务办理时间
题目描述
某服务大厅同时开放3个窗口为客户办理业务,窗口编号分别为1、2、3。现有N(2≤N≤50)位客户需要办理业务,客户编号为1~N,作为办理业务的先后顺序。起初三个窗口为空闲状态,空闲的窗口会按照客户编号顺序呼叫下一位客户。如果多个窗口同时为空闲状态,按照窗口编号顺序呼叫(1优先于2,2优先于3)。现给出每位客户办理业务的时间(单位:分钟),请计算出N位客户全部办理完业务后,哪一个窗口合计办理业务的时间最短,并输出最短时间。例如:N=7,7位客户编号分别为1、2、3、4、5、6、7,客户办理业务时间分别为3、5、2、4、7、1、6,(如下图):
初始客户编号为 1、2、3 的客户分别在 1、2、3 窗口同时办理业务;窗口 3 用时 2 分钟办理完 3 号客户的业务,变为空闲状态,并按顺序呼叫 4 号客户,4 号客户用时 4 分钟。窗口 1 用时 3 分钟办理完 1 号客户的业务,变为空闲状态,并按顺序呼叫 5 号客户,5 号客户用时 7 分钟。窗口 2 用时 5 分钟办理完 2 号客户的业务,变为空闲状态,并按顺序呼叫 6 号客户,6 号客户用时 1 分钟。6 分钟后,窗口 2 和 3 同时变为空闲状态,按顺序窗口 2 呼叫 7 号客户,7 号客户用时 6分钟。全部客户办理完业务后,三个窗口总用时分别为 10分钟、12分钟、6分钟,用时最短的是窗口 3,最短时间为 6 分钟。
输入
第一行输入一个正整数 N(2 ≤ N ≤ 50),表示办理业务的客户数。
第二行输入 N 个正整数(1 ≤ 正整数 ≤ 50),依次表示每位客户办理业务的时间,正整数之间以一个空格隔开。
输出
输出一个整数,表示客户全部办理完业务,用时最短的窗口所用时间。
样例输入
7
3 5 2 4 7 1 6
样例输出
6
【思路】 模拟排队的过程,需要遍历排队的人
找到目前用时窗口的最少用时时间,最少用时时间相同的话,还找到需要序号最小的窗口。将第i个人需要的时间累加到当前窗口。
【参考答案】
n = int(input())
l = [int(x) for x in input().split(' ')]
a = [0,0,0]
for i in l:
m = min(a) #目前用时窗口的最少用时时间
index = a.index(m) #最少用时时间,且序号最小的窗口序号最小的窗口
a[index] += i
print(min(a))
题目五:
【思路】
从n出发到m,每次可以走1步或2步,路线就是不同走法的组合
n = 3, m = 7
组合1:3+2+2 = 7
组合2:3+2+1+1 = 7
组合3:3+1+2+1 = 7
组合4:3+1+1+2 = 7
组合5:3+1+1+1+1 = 7
【参考答案】
n,m = [int(x) for x in input().split()]
s = 0 #路线总数
def search(n,cur):
global s
if cur==m: #累加和等于m
s += 1
return
elif cur>m: #累加和大于m,组合无效
return
else:
search(n,cur+2)
search(n,cur+1)
search(n,n)
print(s)