zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

amp模拟 蓝桥 刷题 枚举 集训 Day1 day2
2023-09-11 14:22:10 时间

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

一、成绩分析

题目描述

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

请计算这次考试的最高分、最低分和平均分。

输入描述:

输入的第一行包含一个整数 n ( 1 ≤ n ≤ 1 0 4 ) n (1≤n≤10^4) n(1n104),表示考试人数。

接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

输出描述

输出三行。

第一行包含一个整数,表示最高分。

第二行包含一个整数,表示最低分。

第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。

输入输出样例

*示例:

输入

7
80
92
56
74
88
99
10

输出

99
10
71.29

*运行限制:

  • 最大运行时间:1s
  • 最大运行内存: 256M

这道题目主要考察四舍五入保留正好两位小数的方法。在python中主要有四种方法实现。

  1. %.2f
  2. format方法
  3. round函数
  4. 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 ≤ 1 0 6 1≤a,b,n≤10^6 1a,b,n106.

对于100% 的评测用例, 1 ≤ a , b , n ≤ 1 0 18 1≤a,b,n≤10^{18} 1a,b,n1018.

运行限制

  • 最大运行时间: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

LNLNANANIOAOLQAINONOAQINAN 等 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 = 0

for 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+1
        col = j+1
        while row < len(chars) and col < len(chars[0]):
            if chars[i][j] < chars[row][col]: 
                count += 1
            row += 1;col += 1
        # 统计左对角线
        # 从当前元素的左下角开始,遍历当前左对角线中所有比它大的元素
        row = i+1
        col = j-1
        while row < len(chars) and col >= 0:
            if chars[i][j] != chars[row][col]: 
                count += 1
            row += 1
            col -= 1
print(count)