[蓝桥杯真题] Day1
目录
单词分析
成绩统计
最短路
回文日期
门牌制作
购物单
数字三角形
单词分析
题目描述
正致力于掌握一门独特的语言艺术。该语言的独特之处在于其每个单词仅由26个小写字母构成,并且有些单词其长度远超常规。经过长时间的学习仍无法熟记某些词汇。他打算通过统计每个字母在词汇中的频率来识别不同词语。
现在,请你指导小蓝完成:当提供了一个单词时,请指导小蓝找出出现频率最高的字母及其出现次数。
输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
输出描述
第一行为最频繁出现的字母;若有多字母并列最高频,则取字典序最小者
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
letter = input()
max_letter = None
max_num = 0
new_li = sorted(list(set(letter)))
for i in new_li:
if max_num < letter.count(i):
max_num = letter.count(i)
max_letter = i
print(max_letter)
print(max_num)
成绩统计
题目描述
小蓝精心策划了一次考试任务,并将试卷命题划分为满分100分的标准。每位学生的成绩都在0至100的整数范围内。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
烦请计算及格比例和优秀比例,并以百分比形式表示,请将百分号前的部分取整数值。
输入描述
输入的第一行包含一个整数 n\ (1 \leq n \leq 10^4)n (1≤n≤104),表示考试人数。
接下来 nn 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
及格率为48%,优秀率为12%。
请输出两个数据分别表示及格率和优秀率,请将数值四舍五入至整数位后显示
import os
import sys
n = int(input())
li = []
for j in range(n):
li.append(int(input()))
# li = list(map(int,input().split()))
li_A = [] # 优秀
li_B = [] # 及格
for i in li:
if i >= 85:
li_A.append(i)
elif i >= 60:
li_B.append(i)
else:
continue
A = len(li_A)/len(li)
B = (len(li_B)+len(li_A))/len(li)
print("{0:.0%}".format(B))
print("{0:.0%}".format(A))
最短路
这是一道填空题的问题,请只需计算得出结果后并在代码编写过程中通过适当的步骤完成相应的操作即可完成任务要求。
如上图所示,GG 被定义为一个无向图,在该图中蓝色线条段长度设定为 11 单位、橘色线条段长度设定为 22 单位以及绿色线条段长度设定为 33 单位。

则从 AA 到 SS 的最短距离是多少?
import os
import sys
# 请在此输入您的代码
# 填空题,直接自己推
print(6) # A D H L R S
回文日期
在2020年春节期间,有一个值得所有人关注的特别日子:2020年2月2日。这个日期以"yyyymmdd"格式记录为8位数时即为20200202,在数学上表现为一个回文数。我们称这样的日期为回文日期
有人认为(而不是表示)"千年一遇"这个描述有些夸张。事实上,在两年后就会遇到下一个这样的回文日:即为公元二千零二十一年的十二月二日。
也有人表示 20200202 并不仅仅是一个回文日期,并且还是一个 ABABBABA 型的回文日期。对此小明并不赞同,在大约 100 年后就能再次遇到下一个 ABABBABA 型的回文日期:即 21211212(对应 2121 年 12 月 12 日)。这不能算作 "千年一遇" ,只能说每隔千年就能遇到一次这样的特殊回文日期。
请提供一个由8个数字组成的日期,并要求计算在该日期之后出现的第一个具有回文形式的下一个最近日期以及具有ABABBABA模式形式的下一个回文型特殊结构日期。
输入描述
输入包含一个八位整数 NN,表示日期。
对于所有评测用例,10000101 \leq N \leq 8999123110000101≤N≤89991231,保证 NN 是一个合法日期的 8 位数表示。
输出描述
输出两行内容。
每行为一个八位数。
第一行为下个回文日期,
第二行为下个 ABABBABA 型的回文日期。
import os
import sys
# 请在此输入您的代码
"""
测试是正确的,但是提交检测就报错了,具体也不知道什么原因
"""
time = int(input())
def huiwen(time):
li_huiwen = []
li_AB = []
for i in range(time + 1, 100000000):
li_i = list(str(i))
## 回文数,使列表倒序等于正序
if li_i == li_i[::-1]:
li_huiwen.append(i)
## ABABBABA
if li_i[0] == li_i[2] == li_i[5] == li_i[7] and li_i[1] == li_i[3] == li_i[4] == li_i[6]:
li_AB.append(i)
if len(li_AB) != 0 and len(li_huiwen) != 0:
print(li_huiwen[0])
print(li_AB[0])
break
huiwen(time)
门牌制作
题目描述
此题属于填空练习类型,在代码编写过程中,请通过在代码中使用输出语句实现结果填充。
小蓝要为一条街的住户制作门牌号。
这条街一共有 20202020 位住户,门牌号从 11 到 20202020 编号。
小蓝采用的制作门牌方法是先制造从"00"到"99"这一系列数字字符。最后将所需的数字字符按照编号依次粘贴到门牌上。例如编号为"1017"的门牌需依次粘贴数字"1"、"0"、"1""、"7""(此处应为'7'而非'71')等。即分别需准备数量为十一枚的'00'型数字和十一枚的'77'型数字等。
请问要制作所有的 11 到 20202020 号门牌,总共需要多少个字符 2?
import os
import sys
# 请在此输入您的代码
def num_number(n):
re = 0
for i in range(1,n):
re_i = list(str(i))
for j in re_i:
if j == "2":
re += 1
return re
print(num_number(2021))
购物单
题目描述
该题目为填空题
最近小明顺利地获得了工作的机会。然而老板太太总是忍不住大采购。当老板有事的时候常常会让小明代为前往商场购置所需物品。对此小明感到非常不快却又不得不委曲求全。
这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
小明此刻心情十分烦躁,请你协助他计算从取款机上取出相应的金额,并希望由此能顺利完成此次购物。
自助取款机仅限于提供 100100 元面额的纸币。小明希望尽量少提取现金以满足需求即可。请计算其最小总金额是多少。
以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折
其中"9999折"即为标价的99.99%,而"6666折"则相当于标价的66.66%;其余情况则依此类推。值得注意的是,在特殊情况下会有不同的计费标准:如**"半价销售"即为标价的一半(即50%)**等情形存在。
请输出小明要从取款机上提取的金额,单位是元。
自己用word或者excel处理一下
import os
import sys
# 请在此输入您的代码
re = 180.90 * 0.88 +10.25 * 0.65 +56.14 * 0.9+104.65 * 0.9 +100.30 * 0.88+297.15 *0.5 +26.75 * 0.65 +130.62 *0.5 +240.28 * 0.58 +270.62 * 0.8 +115.87 * 0.88+247.34 * 0.95+73.21 * 0.9 +101.00 *0.5 +79.54 *0.5+278.44 * 0.7+199.26 *0.5+12.97 * 0.9+166.30 * 0.75 +125.50 * 0.58 +84.98 * 0.9 +113.35 * 0.68 +166.57 *0.5 +42.56 * 0.9+81.90 * 0.95 +131.78 * 0.8 +255.89 * 0.78 +109.17 * 0.9 +146.69 * 0.68 +139.33 * 0.65 +141.16 * 0.78 +154.74 * 0.8 +59.42 * 0.8 +85.44 * 0.68+293.70 * 0.88 +261.79 * 0.65 +11.30 * 0.88 +268.27 * 0.58 +128.29 * 0.88 +251.03 * 0.8 +208.39 * 0.75+128.88 * 0.75 +62.06 * 0.9+225.87 * 0.75 +12.89 * 0.75 +34.28 * 0.75+62.16 * 0.58+129.12 *0.5 +218.37 *0.5+289.69 * 0.8
print(5200)
数字三角形
题目描述

上图中呈现了一个数字三角形结构。沿着三角形从顶端到底端有多条可选路径。对于每一特定路径,在其路径上的数值进行累加运算后可以获得相应的总值。你的目标便是通过分析所有可能的路线来确定能够获得的最大总值是多少。
路径上的每一个步骤必须从一个数字延伸到下一层与其相邻的左边数字或右边数字。同时满足以下两个条件:一是左右向下移动的数量差额不超过1。
输入描述
输入的第一行包含一个整数 N\ (1 \leq N \leq 100)N (1≤N≤100),表示三角形的行数。
下面的 NN 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。
输出描述
输出一个整数,表示答案。
h = int(input()) # 输入数据
W = [list(map(int, input().split())) for i in range(h)]
# 循环遍历计算到每一行的和的最大值
for i in range(1, h):
for j in range(0, i + 1):
if j == 0: # 最左边元素只能由右上方得到
W[i][j] += W[i - 1][j]
elif j == i: # 最右边元素只能由左上方得到
W[i][j] += W[i - 1][j - 1]
else: # 其余元素由上方较大值得到
W[i][j] += max(W[i - 1][j - 1: j + 1])
if h & 1: # 如果是奇数行,则返回最中间值
print(W[-1][h // 2])
else: # 偶数行则返回中间较大值
print(max(W[-1][h // 2 - 1], W[-1][h // 2]))
文件格式转换
这道题系统有bug,并且题目老套,不推荐做。
A+B 问题【OJ 示例题目】
题目描述
热忱欢迎深入探索算法竞赛 OJ 平台!本题作为经典的 A+B 问题将作为入门题目出现。我们将以此题为基础向大家演示蓝桥云课 OJ 系统的基本操作流程。
问题描述
输入两个正整数 A,BA,B,请你计算 A+BA+B,并输出。
输入描述
输入一行,为用空格分隔的两个正整数 a,ba,b( 1 \leq a,b \leq 1001≤a,b≤100 )。
输出描述
输出一行,为 a+ba+b 的结果。(后台测试会忽略行末空格及换行)
输入输出样例
示例
输入
1 2
输出
3
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
import os
import sys
# 请在此输入您的代码
a,b = map(int,input().split())
print(a+b)
卡片
题目描述
这道题目为填空题。请确保在代码编写过程中使用输出语句将所填写的结果进行输出。
小蓝拥有大量数字卡片(这些卡片编号从 00 到 99),为了便于拼接使用他将它们分类存放以便后续操作。他计划从小到大的顺序依次拼接正整数,并且每次拼接完成后就立即保存以便查阅使用记录。需要注意的是,在完成每一个数字的构建后这些被使用的卡片将被耗尽用于当前拼接任务所以不能再用于后续的构建活动。
假设现在的情况是:现在小蓝拥有的每一种编号(从 00 到 99)的数字卡各有 N 张(N=2, 对应的具体数值),那么问题来了:小蓝最多能连续拼出哪些正整数?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
# 纯暴力
re_1 = 0
re_2 = 0
re_3 = 0
re_4 = 0
re_5 = 0
re_6 = 0
re_7 = 0
re_8 = 0
re_9 = 0
for i in range(1,10000):
str(i)
for k in str(i):
if k == "1":
re_1 += 1
elif k == "2":
re_2 += 1
elif k == "3":
re_3 += 1
elif k == "4":
re_4 += 1
elif k == "5":
re_5 += 1
elif k == "6":
re_6 += 1
elif k == "7":
re_7 += 1
elif k == "8":
re_8 += 1
elif k == "9":
re_9 += 1
if re_1>=2021 or re_2>=2021 or re_3>=2021 or re_4>=2021 or re_5>=2021 or re_6>=2021 or re_7>=2021 or re_8>=2021 or re_9>=2021:
print(i)
break
# print(3181)
#解题思路:拼数字的话1的卡片肯是用的最快的
re = 2021
for i in range(1,5000):
res = str(i)
for j in res:
if j == "1":
re = re - 1
if re == 0:
print(i)
else:
continue
各位晚安,今天第一天,我要早睡!明天继续更新
