当前位置:首页>python>【第42期】21天养成编程习惯:Python刷题第15天

【第42期】21天养成编程习惯:Python刷题第15天

  • 2026-09-02 16:25:37
【第42期】21天养成编程习惯:Python刷题第15天

跟老马一起“升级打怪”学编程!


Day15:GESP一级2023.09_小明的幸运数

【提交】

https://www.luogu.com.cn/problem/B3864

【问题描述】

所有个位数为的正整数,以及所有的倍数,都被小明称为“幸运数”。小明想知道正整数和之间(包括和)所有幸运数的和,你能帮帮他吗?

【输入描述】

输入3行。第一行包含一个正整数,第二行包含一个正整数,第三行包含一个正整数。约定,。

【输出描述】

输出1行,符合题意的幸运数之和。

【样例输入1】

7110

【样例输出1】

7

【样例解释1】

1和10之间共有1个7幸运数:7。因为7既是7的倍数,个位数⼜为7。因此,结果为7。

【样例输入2】

71020

【样例输出2】

31

【样例解释2】

10和20之间共有2个7幸运数:14和17。14是7的倍数,17的个位数为7。因此,结果为31。

参考程序:

方法一:

'''[GESP202309 一级] 小明的幸运数https://www.luogu.com.cn/problem/B3864'''k = int(input())L = int(input())R = int(input())s = 0for i in range(L, R + 1):if i % 10 == k or i % k == 0:        s += iprint(s)

方法二:

'''[GESP202309 一级] 小明的幸运数https://www.luogu.com.cn/problem/B3864'''k = int(input())L = int(input())R = int(input())lst = [i for i in range(L, R + 1) if i % 10 == k or i % k == 0]print(sum(lst))

Day15:GESP二级2025.03_时间跨越

【提交】

https://www.luogu.com.cn/problem/B4260

【问题描述】

假设现在是  年  月  日  时而  小时后是  年  月  日  时,对于给定的 ,小杨想请你帮他计算出对应的  是多少。

【输入描述】

输入包含五行,每行一个正整数,分别代表 。

【输出描述】

输出四个正整数,代表  。

【样例输入1】

2008228231

【样例输出1】

2008 2 29 0

【数据范围】

对于全部数据,保证有 ,,,,。数据保证为合法时间。

【提示】

闰年判断规则

  • 普通闰年:年份能被 4 整除,但不能被 100 整除。
  • 世纪闰年:年份能被 400 整除。

满足以上任意一条规则的年份就是闰年,否则是平年。

参考程序:

'''[GESP202503 二级] 时间跨越https://www.luogu.com.cn/problem/B4260'''y = int(input())m = int(input())d = int(input())h = int(input())k = int(input())h = k + hif h >= 24:    h = h - 24    d = d + 1if m == 1or m == 3or m == 5or m == 7or m == 8or m == 10or m == 12:if d > 31:            d = d - 31            m = m + 1elif m == 4or m == 6or m == 9or m == 11:if d > 30:            d = d - 30            m = m + 1elif m == 2:if (y % 4 == 0and y % 100 != 0) or (y % 400 == 0):if d > 29:                d = d - 29                m = m + 1else:if d > 28:                d = d - 28                m = m + 1if m > 12:        m = m - 12        y = y + 1print(y, m, d, h)

Day15:GESP三级2024.09_平衡序列

【提交】

https://www.luogu.com.cn/problem/B4038

【问题描述】

小杨有一个包含  个正整数的序列 ,他认为一个序列是平衡的当且仅当存在一个正整数 ()使得序列第  个到第  个数字的总和等于第  个到第  个数字的总和。

小杨想请你判断序列  是否是平衡的。

【输入描述】

第一行包含一个正整数 ,代表测试用例组数。

接下来是  组测试用例。对于每组测试用例,一共两行。

第一行包含一个正整数 ,代表序列长度。

第二行包含  个正整数,代表序列 。

【输出描述】

对于每组测试用例,如果序列  是否是平衡的,输出 Yes,否则输出 No。

【样例输入1】

331 2 342 3 1 451 2 3 4 5 

【样例输出1】

YesYesNo

【提示】

  • 对于第一组测试用例,令 ,则有 ,因此序列是平衡的;
  • 对于第二组测试用例,令 ,则有 ,因此序列是平衡的;
  • 对于第三组测试用例,不存在满足要求的  。

对于全部数据,保证有 。

参考程序:

'''[GESP202409 三级] 平衡序列https://www.luogu.com.cn/problem/B4038'''t = int(input())for _ in range(t):    n = int(input())    lst = list(map(int, input().split()))    total = sum(lst)    ans = 0    flag = Truefor x in lst:        ans += xif ans * 2 == total:            print("Yes")            flag = Falsebreakif flag:        print("No")

Day15:GESP四级2025.12_优先购买

【提交】

https://www.luogu.com.cn/problem/B4452

【问题描述】

小 A 有  元预算。商店有  个商品,每个商品有商品名 、价格  和优先级  三种属性,其中  为正整数,且  越小代表商品的优先级越高。

小 A 的购物策略为:

  • 总是优先买优先级最高的东西;

  • 如果有多个最高优先级商品,购买价格最低的;

  • 如果有多个优先级最高且价格最低的商品,购买商品名字典序最小的。

小 A 想知道能购买哪些商品。

【输入描述】

第一行两个正整数 ,代表预算和商品数。

之后  行,每行一个商品,依次为 ,代表第  个商品的商品名、价格、优先级。

数据保证不存在两个名字相同的商品。

【输出描述】

按照字典序从小到大的顺序,输出所有购买商品的商品名。

【样例输入1】

20 4apple 6 8bus 15 1cab 1 10water 4 8

【样例输出1】

buscabwater

【数据范围】

对于所有测试点,保证 ,,, ,。商品名仅由小写字母组成且不存在两个相同的商品名。

参考程序:

'''[GESP202512 四级] 优先购买https://www.luogu.com.cn/problem/B4452'''M, N = list(map(int, input().split()))items = []for _ in range(N):    name, price, priority = input().split()    items.append((name, int(price), int(priority)))# 排序规则:优先级升序,价格升序,名字字典序升序items.sort(key=lambda x: (x[2], x[1], x[0]))# 贪心购买bought = []for name, price, _ in items:if price <= M:        bought.append(name)        M -= price# 将购买的商品按字典序排序后输出bought.sort()for name in bought:    print(name)

青少年编程竞赛交流

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

最新文章

随机文章