刷题日记?刷题日寄!
萌新备战蓝桥杯python组
🌹 发现有需要纠正的地方,烦请指正!
🚀 欢迎小伙伴们的三连+关注!
往期系列:
【蓝桥杯简单篇】Python组刷题日寄Part01
简单篇05
【蓝桥杯简单篇】Python组刷题日寄Part05
第01题:计算器
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
王小二的计算器上面的LED显示屏坏掉了,于是他找到了在计算器维修与应用系学习的你来为他修计算器。
屏幕上可以显示0~9的数字,其中每个数字由7个小二极管组成,各个数字对应的表示方式如图所示:
为了排除电路故障,现在你需要计算,将数字A变为数字B需要经过多少次变换?
注意:现在将其中每段小二极管的开和关都定义为一次变换。例如数字1变为2是5次操作。
输入描述:
第一行为一个正整数L,表示数码的长度。
接下来两行是两个长度为L的数字A和B,表示要把数字A变成数字B(数字可以以0开头)。
数据范围:L< =100
输出描述:
一行一个整数,表示这些小二极管一共要变换多少次。
样例输入:
3
101
025
样例输出:
12
答案:
分析:
将7段二极管的开关定义为1或0,这样就用一个字符串表示每个数字的状态,之后逐个对比即可。
l = int(input())
num01 = input()
num02 = input()
lis = ['1110111', '0010010', '1011101', '1011011', '0111010',
'1101011', '1101111', '1010010', '1111111', '1111011']
count = 0
for i in range(l):
a = int(num01[i])
b = int(num02[i])
if a != b:
for j in range(7):
if lis[a][j] != lis[b][j]:
count += 1
print(count)
第02题:色盲的民主
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
n个色盲聚在一起,讨论一块布的颜色。尽管都是色盲,却盲得各不相同。每个人都有自己的主张,争论不休。最终,他们决定采取民主投票的方式决定布的颜色,不管布同不同意。某种颜色用字符串表示(字符串为颜色单词或词组,也就是可能有被空格隔开的两个单词组成的颜色词组),只要字符串不同,程序即判断颜色不同。现在给出这n个人所选择的颜色,输出最有可能的颜色(也就是获得投票最多的颜色),如果有多个颜色获得了最多的投票,则将它们按字典序分行全部输出。
输入描述:
第一行一个正整数n,表示色盲的人数
接下来n行,每行一句话
数据规模和约定
n<=1000
颜色单词最多20个字符,只包含小写字母或者空格
输出描述:
若干行,获得投票最多的颜色,按字典序输出
样例输入:
5
red
blue
black
black
blue
样例输出:
black
blue
答案:
分析:
利用集合去重,然后利用列表的count
方法统计元素数量,随后查找对应颜色,按顺序输出。
n = int(input())
lis = []
for i in range(n):
lis.append(input())
color = list(set(lis)) # 利用集合去重
num = [] # 统计颜色出现数量
for i in color:
num.append(lis.count(i))
result = []
for i in range(len(num)): # 统计出现次数最多的颜色
if num[i] == max(num):
result.append(color[i])
result.sort() # 排序
for i in result:
print(i)
第03题:聪明的美食家
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
如果有人认为吃东西只需要嘴巴,那就错了。
都知道舌头有这么一个特性,“由简入奢易,由奢如简难”(据好事者考究,此规律也适合许多其他情况)。具体而言,如果是甜食,当你吃的食物不如前面刚吃过的东西甜,就很不爽了。
大宝是一个聪明的美食家,当然深谙此道。一次他来到某小吃一条街,准备从街的一头吃到另一头。为了吃得爽,他大费周章,得到了各种食物的“美味度”。他拒绝不爽的经历,不走回头路而且还要爽歪歪(爽的次数尽量多)。
输入描述:
两行数据。
第一行为一个整数n,表示小吃街上小吃的数量
第二行为n个整数,分别表示n种食物的“美味度”
数据规模和约定:
美味度为0到100的整数
n< 1000
输出描述:
一个整数,表示吃得爽的次数
样例输入:
10
3 18 7 14 10 12 23 41 16 24
样例输出:
6
答案:
分析:
本题实际是求最长不下降子序列的长度。利用动态规划思想,具体思路见代码注释。
n = int(input())
lis = list(map(int, input().split()))
lis.insert(0, 0) # 初始相当于先吃一个为美味度0的
dp = [0 for i in range(n+1)]
# dp[i] 表示前i+1个元素的序列中 最长不下降子序列的长度
# dp[0] = 0, 因此初始都赋值为0
for i in range(1, n+1):
temp = []
for j in range(i):
if lis[j] <= lis[i]:
# 如果第 j+1 个小于第 i+1 个
temp.append(dp[j]+1)
# 那么爽的次数+1
dp[i] = max(temp)
print(max(dp))
第04题:统计单词数
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
统计输入英文文章段落中不同单词(单词有大小写之分, 但统计时忽略大小写)各自出现的次数。 输入段落中所含单词的总数不超过100,最长单词的长度不超过20个字母.
输入描述:
一个包含若干句子的段落, 每个句子由若干英文单词组成. 除空格, 逗号和句号外, 这些输入的句子中不含其他非字母字符, 并且, 逗号和句号紧跟在它前面的英文单词后面, 中间没有空格. 段落最后一个字符是回车符, 表示输入结束.
输出描述:
若段落中共有M个不同的英文单词,则按照其在段落中出现的先后顺序输出M行,各行的格式为: 单词中所有字母均用大写形式输出(最长的单词顶格输出,它前面没有多余的空格; 其余单词与其右对齐)+冒号+N个*号+该单词在段落中的出现次数N
样例输入:
This is a test. This test is easy. This is a test. This test is easy.
样例输出:
THIS:****4
IS:****4
A:**2
TEST:****4
EASY:**2
答案:
分析:
字符串的strip()
,split()
,upper()
方法;列表的count()
方法;格式化输出。
s = input().strip().split()
word = []
L = 0
for i in range(len(s)):
s[i] = s[i].strip('.')
s[i] = s[i].strip(',')
s[i] = s[i].upper()
if s[i] not in word:
word.append(s[i])
L = max([len(i) for i in word])
for i in word:
num = s.count(i)
print('{1:>{0:}}:'.format(L, i)+'*'*num+str(num))
第05题:笨小猴
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
输入描述:
输入文件只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
输出描述:
输出文件共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
样例输入:
error
样例输出:
Lucky Word
2
答案:
分析:
略。
s = list(input())
num = []
for i in set(s):
num.append(s.count(i))
result = max(num) - min(num)
def prime(n):
if n <= 1:
return False
else:
for i in range(2, n):
if n%i == 0:
return False
return True
if prime(result):
print('Lucky Word')
print(result)
else:
print('No Answer')
print('0')
第06题:素数求和
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
输入一个自然数n,求小于等于n的素数之和
输入描述:
数据规模和约定
测试样例保证 2 < = n < = 2,000,000
输出描述:
无
样例输入:
2
样例输出:
2
答案:
分析:
如果遍历每个小于等于n个数,判断其是否为质数,运算时间过长,会超时。
这里采用埃拉托色尼筛选法,即每找到一个质数,都将其的倍数从遍历列表中删去,这样便减少了计算量。代码中可以用bool
运算符表示其是否在遍历列表中。具体见代码注释。
n = int(input())
def prime(n):
# 判断是否为质数
for i in range(2, n//2+1):
if n%i == 0:
return False
return True
primes = [True for i in range(n+1)]
# 表示是否为遍历列表中,即是否为质数
# 因为实际计算中用不到0和1,这里也就不用再将其置为False
result = 0
for i in range(2, n+1):
# 从第一个质数2开始
if primes[i]:
# 如果是质数, 即 primes[i]==True
for j in range(i*2, n+1, i):
# 将这个质数的倍数都置为False
primes[j] = False
result += i
print(result)
第07题:利息计算
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
编制程序完成下述任务:接受两个数,一个为用 户一年期定期存款金额,一个为按照百分比格式表示的利率;程序计算一年期满后本金与利息总额。说明:
(1)存款金额以人民币元为单位,可能精确到分;
(2)输入利率时不需要输入百分号,例如一年期定期存款年利率为2.52%,用户输入2.52即可;
(3)按照国家法律,存款利息所得需缴纳20% 的所得税,计算结果时所得税部分应扣除。
输入描述:
输入一行,包含两个实数,分别表示本金和年利率。
输出描述:
输出一行,包含一个实数,保留到小数点后两位,表示一年后的本金与利息和。
样例输入:
10000 2.52
样例输出:
10201.60
答案:
分析:
略。
money, rate = map(float, input().split())
print('{:.2f}'.format(money*(1+rate*0.01*0.8)))
第08题:五次方数
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
对一个数(大于1)十进制表示时的每一位数字乘五次方再求和,会得到一个数的五次方数
例如:1024的五次方数为1+0+32+1024=1057
有这样一些神奇的数,它的五次方数就是它自己,而且这样的数竟然只有有限多个
从小到大输出所有这样的数
输入描述:
无
输出描述:
每个数独立一行输出
样例输入:
无
样例输出:
无
答案:
分析:
要提前判断大致边界。
for i in range(2, 299999):
temp = 0
for j in str(i):
temp += int(j)**5
if temp == i:
print(i)
第09题:分数统计
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
给定一个百分制成绩T,将其划分为如下五个等级之一:
90~100
为 A
,80~89
为 B
,70~79
为 C
,60~69
为 D
,0~59
为 E
现有若干百分制成绩(成绩个数不超过1000个),请你统计五个等级段的人数,并找出人数最多的那个等级段,按照从大到小的顺序输出该段中所有人成绩(保证人数最多的等级只有一个)。
输入描述:
第一行是成绩的个数 n
第二行是学生的成绩,若干0~100
的正整数,用空格隔开
输出描述:
第一行为5个正整数,分别表示 A,B,C,D,E
五个等级段的人数
第二行一个正整数,表示人数最多的等级段中人数
接下来一行若干个用空格隔开的正整数,表示人数最多的那个等级中所有人的分数,按从大到小的顺序输出。
样例输入:
10
100 80 85 77 55 61 82 90 71 60
样例输出:
2 3 2 2 1
3
85 82 80
答案:
分析:
略。
n = int(input())
lis = list(map(int, input().split()))
sta = [[], [], [], [], []]
for i in lis:
if 90 <= i <= 100:
sta[0].append(i)
elif 80 <= i <= 89:
sta[1].append(i)
elif 70 <= i <= 79:
sta[2].append(i)
elif 60 <= i <= 69:
sta[3].append(i)
else:
sta[4].append(i)
L = 0
for i in sta:
print(len(i), end=' ')
if len(i) > L:
L = len(i)
result = i
print()
print(L)
result.sort(reverse=True)
for i in result:
print(i, end=' ')
第10题:不同单词个数统计
题目:
时间限制:
1s
内存限制:
128MB
题目描述:
编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数。例如:对于句子“one little two little three little boys”,总共有5个不同的单词:one, little, two, three, boys。
说明:
(1)输入的句子当中只包含英文字符和空格,单词之间用一个空格隔开;
(2)不用考虑单词的大小写,假设输入的都是小写字符;
(3)句子长度不超过100个字符。
输入描述:
输入只有一行,即一个英文句子。
输出描述:
输出只有一行,是一个整数,表示句子中不同单词的个数。
样例输入:
one little two little three little boys
样例输出:
5
答案:
分析:
略。
word = set(input().split())
print(len(word))