蓝桥杯3月刷题集训-A 【枚举模拟】Day1~Day2

蓝桥杯3月刷题集训-A 【枚举&模拟】Day1~Day2
一、成绩分析
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
请计算这次考试的最高分、最低分和平均分。
输入描述:
输入的第一行包含一个整数n(1≤n≤104)n (1≤n≤10^4)n(1≤n≤104),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。
输入输出样例
*示例:
输入
7 80 92 56 74 88 99 10输出
99 10 71.29*运行限制:
- 最大运行时间:1s
- 最大运行内存: 256M
这道题目主要考察四舍五入保留正好两位小数的方法。在python中主要有四种方法实现。
- %.2f
- format方法
- round函数
- f-string
其中f-string方法需要Python 3.6及以上版本,本人在蓝桥杯官网测试过这四种方法,其中round函数只能通过8个样例,其余可以全部通过。
score = []
n = int(input())
for i in range(n):i = int(input())score.append(i)
print(max(score))
print(min(score))
avg_ = sum(score)/n
# print('%.2f'%(avg_))
# print(round(avg_,2))
# print('{:.2f}'.format(avg_))
print(f'{avg_:.2f}')
二、饮料换购
题目描述
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料,凭 3 个瓶盖可以再换一瓶 C 型饮料,并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。
输入描述
输入一个整数 n(0<n<1000)n(0<n<1000)n(0<n<1000),表示开始购买的饮料数量。
输出描述
输出一个整数,表示实际得到的饮料数
输入输出样例
示例
输入
100输出
149运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
这道题目主要考察循环和整数除法的概念,循环用于重复执行一组操作,直到满足某个条件为止。整数除法是指在两个整数相除时,只保留其整数部分并舍去小数部分的操作。
n = int(input())
result = n
while n >= 3:result += n // 3 # n除以3并向下取整n = n // 3 + n % 3 # n除以3的商加上n除以3的余数
print(result)
三、刷题统计
问题描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数 a*,*b 和 n.
输出格式
输出一个整数代表天数。
样例输入
10 20 99样例输出
8评测用例规模与约定
对于 50% 的评测用例,1≤a,b,n≤1061≤a,b,n≤10^61≤a,b,n≤106.
对于100% 的评测用例, 1≤a,b,n≤10181≤a,b,n≤10^{18}1≤a,b,n≤1018.
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
虽然本题的标签是简单题,但是如果不注意一些细节的话,可能无法全部通过,我在前几次编写程序的时候,只通过了5和7个样例,欠缺了一些考虑,大致的做题思路就是,我们可以先计算一整周的总做题数,然后用n算出做了几个整周的天数,然后算出剩余没有做的题数,也就是出去多个整周的题目,剩余不到一整周的题目数,因为工作日和周末做题数不一致,所以我们需要判断剩余题数是在工作日做完还是在周末做完,剩下的判断就比较简单了。
a, b ,n = map(int, input().split())
sum_7 = 5 * a + 2 * b # 一整周的做题数
days = (n // sum_7 ) * 7 # 做了几个整周的天数
n %= sum_7 # 剩余题数
if n <= 5 * a: # 剩余题数工作日能做完days += n // a # 做完剩余题数的天数if n % a == 0: # 如果剩余题数刚好做完days += 0 # 天数不变else: # 如果剩余题数没做完days += 1 # 天数加1
else: # 剩余题数工作日做不完days += 5 # 加上之前的五天n -= 5 * a # 减去五天的做题数days += n // b # 做完剩余题数的天数if n % b == 0: # 如果剩余题数刚好做完days += 0 # 天数不变else: # 如果剩余题数没做完days += 1 # 天数加1
print(days)
四、天干地支
题目描述
古代中国使用天干地支来记录当前的年份。
天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊(wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。
地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ)、未(wèi)、申(shēn)、酉(yǒu)、戌(xū)、 亥(hài)。
将天干和地支连起来,就组成了一个天干地支的年份,例如:甲子。
2020 年是庚子年。
每过一年,天干和地支都会移动到下一个。例如 2021 年是辛丑年。
每过 60 年,天干会循环 6 轮,地支会循环 5 轮,所以天干地支纪年每 60 年轮回一次。例如 1900 年,1960 年,2020 年都是庚子年。
给定一个公元纪年的年份,请输出这一年的天干地支年份。
输入描述
输入一行包含一个正整数,表示公元年份。
其中有 ,输入的公元年份为不超过 9999 的正整数。
输出描述
输入一行包含一个正整数,表示公元年份。
输入输出样例
示例
输入
2020输出
gengzi运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
本题难点就在于如何模拟这个循环过程,我们需要抓住关键的两点,天干地支对应的长度,天干有十个,地支有十二个,还有一点就是每60年一循环,题目中已知1900 年,1960 年,2020 年都是庚子年,我们可以推算出最近的甲子年,是1984年,那么我们就可以用输入的年份减去这个年份然后对60取模,然后再分别对天干地支的长度取模,最后得出在天干地支中对应的下标。
year = int(input())
T = ['jia', 'yi', 'bing', 'ding', 'wu', 'ji', 'geng', 'xin', 'ren', 'gui']
D = ['zi', 'chou', 'yin', 'mao', 'chen', 'si', 'wu', 'wei', 'shen', 'you', 'xu', 'hai']
print(T[(year - 1984) % 60 % 10] + D[(year - 1984) % 60 % 12])
五、递增序列
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
对于一个字母矩阵,我们称矩阵中的一个递增序列是指在矩阵中找到两个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这两个字母从左向右看、或者从上向下看是递增的。
例如,如下矩阵中
LANN QIAO有LN、LN、AN、AN、IO、AO、LQ、AI、NO、NO、AQ、IN、AN 等 13 个 递增序列。注意当两个字母是从左下到右上排列时,从左向右看和从上向下看 是不同的顺序。
对于下面的30 行 50 列的矩阵,请问总共有多少个递增序列?
VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG SDLLOVGRTWEYZKKXNKIRWGZWXWRHKXFASATDWZAPZRNHTNNGQF ZGUGXVQDQAEAHOQEADMWWXFBXECKAVIGPTKTTQFWSWPKRPSMGA BDGMGYHAOPPRRHKYZCMFZEDELCALTBSWNTAODXYVHQNDASUFRL YVYWQZUTEPFSFXLTZBMBQETXGXFUEBHGMJKBPNIHMYOELYZIKH ZYZHSLTCGNANNXTUJGBYKUOJMGOGRDPKEUGVHNZJZHDUNRERBU XFPTZKTPVQPJEMBHNTUBSMIYEGXNWQSBZMHMDRZZMJPZQTCWLR ZNXOKBITTPSHEXWHZXFLWEMPZTBVNKNYSHCIQRIKQHFRAYWOPG MHJKFYYBQSDPOVJICWWGGCOZSBGLSOXOFDAADZYEOBKDDTMQPA VIDPIGELBYMEVQLASLQRUKMXSEWGHRSFVXOMHSJWWXHIBCGVIF GWRFRFLHAMYWYZOIQODBIHHRIIMWJWJGYPFAHZZWJKRGOISUJC EKQKKPNEYCBWOQHTYFHHQZRLFNDOVXTWASSQWXKBIVTKTUIASK PEKNJFIVBKOZUEPPHIWLUBFUDWPIDRJKAZVJKPBRHCRMGNMFWW CGZAXHXPDELTACGUWBXWNNZNDQYYCIQRJCULIEBQBLLMJEUSZP RWHHQMBIJWTQPUFNAESPZHAQARNIDUCRYQAZMNVRVZUJOZUDGS PFGAYBDEECHUXFUZIKAXYDFWJNSAOPJYWUIEJSCORRBVQHCHMR JNVIPVEMQSHCCAXMWEFSYIGFPIXNIDXOTXTNBCHSHUZGKXFECL YZBAIIOTWLREPZISBGJLQDALKZUKEQMKLDIPXJEPENEIPWFDLP HBQKWJFLSEXVILKYPNSWUZLDCRTAYUUPEITQJEITZRQMMAQNLN DQDJGOWMBFKAIGWEAJOISPFPLULIWVVALLIIHBGEZLGRHRCKGF LXYPCVPNUKSWCCGXEYTEBAWRLWDWNHHNNNWQNIIBUCGUJYMRYW CZDKISKUSBPFHVGSAVJBDMNPSDKFRXVVPLVAQUGVUJEXSZFGFQ IYIJGISUANRAXTGQLAVFMQTICKQAHLEBGHAVOVVPEXIMLFWIYI ZIIFSOPCMAWCBPKWZBUQPQLGSNIBFADUUJJHPAIUVVNWNWKDZB HGTEEIISFGIUEUOWXVTPJDVACYQYFQUCXOXOSSMXLZDQESHXKP FEBZHJAGIFGXSMRDKGONGELOALLSYDVILRWAPXXBPOOSWZNEAS VJGMAOFLGYIFLJTEKDNIWHJAABCASFMAKIENSYIZZSLRSUIPCJ BMQGMPDRCPGWKTPLOTAINXZAAJWCPUJHPOUYWNWHZAKCDMZDSR RRARTVHZYYCEDXJQNQAINQVDJCZCZLCQWQQIKUYMYMOVMNCBVY ABTCRRUXVGYLZILFLOFYVWFFBZNFWDZOADRDCLIRFKBFBHMAXX运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
我们将给定的字符串 matrix 首先转换为一个二维列表 chars,其中每个元素都是一个字母,然后使用三重嵌套的循环,分别遍历矩阵中的每个元素,并统计符合条件的元素对数目。其中:
- 外层循环遍历每一行;
- 内层循环遍历当前行中的每一个元素;
- 第二层内层循环从当前元素的右侧开始,遍历当前行中所有比它大的元素;
- 第三层内层循环从当前元素的下方开始,遍历当前列中所有比它大的元素;
- 每遍历到一个比当前元素大的元素,就将符合条件的元素对数目加一;
- 最后将统计得到的元素对数目返回。
需要注意的是,我们统计的是矩阵中比其右侧,下方以及右下方元素大的元素对数目,并且并没有去除重复的元素对。也就是说,如果矩阵中存在多个相同的元素,并且这些序列都符合条件,那么这些序列也算。
matrix = '''VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG
SDLLOVGRTWEYZKKXNKIRWGZWXWRHKXFASATDWZAPZRNHTNNGQF
ZGUGXVQDQAEAHOQEADMWWXFBXECKAVIGPTKTTQFWSWPKRPSMGA
BDGMGYHAOPPRRHKYZCMFZEDELCALTBSWNTAODXYVHQNDASUFRL
YVYWQZUTEPFSFXLTZBMBQETXGXFUEBHGMJKBPNIHMYOELYZIKH
ZYZHSLTCGNANNXTUJGBYKUOJMGOGRDPKEUGVHNZJZHDUNRERBU
XFPTZKTPVQPJEMBHNTUBSMIYEGXNWQSBZMHMDRZZMJPZQTCWLR
ZNXOKBITTPSHEXWHZXFLWEMPZTBVNKNYSHCIQRIKQHFRAYWOPG
MHJKFYYBQSDPOVJICWWGGCOZSBGLSOXOFDAADZYEOBKDDTMQPA
VIDPIGELBYMEVQLASLQRUKMXSEWGHRSFVXOMHSJWWXHIBCGVIF
GWRFRFLHAMYWYZOIQODBIHHRIIMWJWJGYPFAHZZWJKRGOISUJC
EKQKKPNEYCBWOQHTYFHHQZRLFNDOVXTWASSQWXKBIVTKTUIASK
PEKNJFIVBKOZUEPPHIWLUBFUDWPIDRJKAZVJKPBRHCRMGNMFWW
CGZAXHXPDELTACGUWBXWNNZNDQYYCIQRJCULIEBQBLLMJEUSZP
RWHHQMBIJWTQPUFNAESPZHAQARNIDUCRYQAZMNVRVZUJOZUDGS
PFGAYBDEECHUXFUZIKAXYDFWJNSAOPJYWUIEJSCORRBVQHCHMR
JNVIPVEMQSHCCAXMWEFSYIGFPIXNIDXOTXTNBCHSHUZGKXFECL
YZBAIIOTWLREPZISBGJLQDALKZUKEQMKLDIPXJEPENEIPWFDLP
HBQKWJFLSEXVILKYPNSWUZLDCRTAYUUPEITQJEITZRQMMAQNLN
DQDJGOWMBFKAIGWEAJOISPFPLULIWVVALLIIHBGEZLGRHRCKGF
LXYPCVPNUKSWCCGXEYTEBAWRLWDWNHHNNNWQNIIBUCGUJYMRYW
CZDKISKUSBPFHVGSAVJBDMNPSDKFRXVVPLVAQUGVUJEXSZFGFQ
IYIJGISUANRAXTGQLAVFMQTICKQAHLEBGHAVOVVPEXIMLFWIYI
ZIIFSOPCMAWCBPKWZBUQPQLGSNIBFADUUJJHPAIUVVNWNWKDZB
HGTEEIISFGIUEUOWXVTPJDVACYQYFQUCXOXOSSMXLZDQESHXKP
FEBZHJAGIFGXSMRDKGONGELOALLSYDVILRWAPXXBPOOSWZNEAS
VJGMAOFLGYIFLJTEKDNIWHJAABCASFMAKIENSYIZZSLRSUIPCJ
BMQGMPDRCPGWKTPLOTAINXZAAJWCPUJHPOUYWNWHZAKCDMZDSR
RRARTVHZYYCEDXJQNQAINQVDJCZCZLCQWQQIKUYMYMOVMNCBVY
ABTCRRUXVGYLZILFLOFYVWFFBZNFWDZOADRDCLIRFKBFBHMAXX'''# 将字符串matrix 转换为一个二维列表 chars,每个元素都是一个字母
chars = [list(i) for i in matrix.split('\\n')]
# 定义一个变量 count,用于统计符合条件的元素对数,初始值为 0
count = 0for i in range(len(chars)):for j in range(len(chars[0])):# 统计行# 从当前元素的右边开始,遍历当前行中所有比它大的元素for k in range(j+1, len(chars[0])):if chars[i][j] < chars[i][k]: count += 1# 统计列# 从当前元素的下面开始,遍历当前列中所有比它大的元素for n in range(i+1, len(chars)):if chars[i][j] < chars[n][j]: count += 1# 统计右对角线# 从当前元素的右下角开始,遍历当前右对角线中所有比它大的元素row = i+1col = j+1while row < len(chars) and col < len(chars[0]):if chars[i][j] < chars[row][col]: count += 1row += 1;col += 1# 统计左对角线# 从当前元素的左下角开始,遍历当前左对角线中所有比它大的元素row = i+1col = j-1while row < len(chars) and col >= 0:if chars[i][j] != chars[row][col]: count += 1row += 1col -= 1
print(count)


