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

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

  • 2026-09-21 19:29:53
【第42期】21天养成编程习惯:Python刷题第20天

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


Day20:GESP一级2025.09_商店折扣

【提交】

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

【问题描述】

商店正在开展促销活动,给出了两种方案的折扣优惠。第一种方案是购物满  元减  元;第二种方案是直接打  折,也就是说价格变为原先的 。这里的  均是正整数,并且 ,。

需要注意的是,第一种方案中满减优惠只能使用一次。例如购物满  元减  元时,若挑选了价格总和为  元的物品,只能减免  元,需要支付  元。

小明在商店挑选了价格总和为  元的物品,结账时只能使用一种优惠方案。小明最少需要支付多少钱呢?

【输入描述】

一行,四个正整数 ,含义见题目描述。

【输出描述】

一行,一个小数,表示小明最少需要支付多少钱,保留两位小数。

【样例输入1】

8 7 9 10

【样例输出1】

3.00

【样例输入2】

8 7 2 11

【样例输出2】

2.20

【提示】

对于所有测试点,保证 ,,。

参考程序:

'''[GESP202509 一级] 商店折扣https://www.luogu.com.cn/problem/B4409'''x = int(input())y = int(input())n = int(input())p = int(input())c = p * n / 10if p >= x:if p - y < c:        c = p - yprint("%.2f" % c)

Day20:GESP二级2026.03_画画

【提交】

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

【问题描述】

输入一个正整数 ,你需要绘制一个  行  列的正方形,绘制规则如下:

  • 正方形的四个顶点使用 + 绘制;
  • 除顶点外,第  行与第  行使用 - 绘制;
  • 除顶点外,第  列与第  列使用 | 绘制;
  • 正方形内部使用 * 绘制。

【输入描述】

一行,一个正整数 。

【输出描述】

输出共  行,表示对应的正方形。

【样例输入1】

5

【样例输出1】

+---+|***||***||***|+---+

【数据范围】

保证 。

参考程序:

'''[GESP202603 二级] 画画https://www.luogu.com.cn/problem/B4498'''n = int(input())for i in range(n):for j in range(n):if i == 0or i == n - 1:# 第一行或最后一行if j == 0or j == n - 1:                print('+', end="")else:                print('-', end="")else:# 中间行if j == 0or j == n - 1:                print('|', end="")else:                print('*', end="")    print()

Day20:GESP三级2023.09_小杨的储蓄

【提交】

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

【问题描述】

小杨共有个储蓄罐,编号从0到。从第1天开始,小杨每天都会往存钱罐里存钱。具体来说,第天他会挑选一个存钱罐 ,并存入元钱。过了天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?

【输入描述】

输入2行,第一行两个整数;第二行个整数,其中第个整数为(保证)。

每行的各个整数之间用单个空格分隔。

保证;

【输出描述】

输出个用单个空格隔开的整数,其中第个整数表示编号为的存钱罐中有多少钱()。

【特别提示】

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

【样例输入1】

2 30 1 0

【样例输出1】

4 2

【样例解释1】

小杨在第1天、第2天、第3天分别向0号、1号、0号存钱罐存了1元钱、2元钱、3元钱,因此0号存钱罐有1+3=4元钱,而1号存钱罐有2元钱。

【样例输入2】

3 50 0 0 2 0

【样例输出2】

11 0 4

参考程序:

'''[GESP202309 三级] 小杨的储蓄https://www.luogu.com.cn/problem/B3867'''N, D = map(int, input().split())lst = list(map(int, input().split()))arr = [0] * Nfor i in range(D):    arr[lst[i]] += i + 1print(" ".join(map(str,arr)))

Day20:GESP四级2025.06_排序

【提交】

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

【问题描述】

体育课上有  名同学排成一队,从前往后数第  位同学的身高为 ,体重为 。目前排成的队伍看起来参差不齐,老师希望同学们能按照身高从高到低的顺序排队,如果身高相同则按照体重从重到轻排序。在调整队伍时,每次只能交换相邻两位同学的位置。老师想知道,最少需要多少次交换操作,才能将队伍调整成目标顺序。

【输入描述】

第一行,一个正整数 ,表示队伍人数。

接下来  行,每行两个正整数  和 ,分别表示第  位同学的身高和体重。

【输出描述】

输出一行,一个整数,表示最少需要的交换次数。

【样例输入1】

51 603 702 804 554 50

【样例输出1】

8

【样例输入2】

54 04 02 03 01 0

【样例输出2】

1

【数据范围】

对于所有测试点,保证 ,。

参考程序:

注:官方给的参考答案,在洛谷提交也超时了。

'''[GESP202506 四级] 排序https://www.luogu.com.cn/problem/B4361'''n = int(input())lst = []for _ in range(n):    s = tuple(map(int, input().split()))    lst.append(s)cnt = 0for i in range(n - 1):    flag = Truefor j in range(len(lst) - 1 - i):if lst[j] < lst[j + 1]:            lst[j], lst[j + 1] = lst[j + 1], lst[j]            cnt += 1            flag = Falseif flag isTrue:breakprint(cnt)

青少年编程竞赛交流

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

最新文章

随机文章