9月真题不新!用6月去旅行对照商店折扣,搞懂GESP一级最便宜问题

四季读书网 6 0
9月真题不新!用6月去旅行对照商店折扣,搞懂GESP一级最便宜问题

9月真题不新!用6月去旅行对照商店折扣,搞懂GESP一级最便宜问题

准备2026年12月GESP Python一级的同学,常觉得“每道题都不一样”。其实很多真题考查的是同一类能力:把生活问题抽象成几个方案,分别算价格,再比较出最小值。

本文用两道官方真题说明:

  • 2026年6月一级《去旅行》:三种出行方案,取最便宜总价
  • 2025年9月一级《商店折扣》:两种促销方案,取最少付款,保留两位小数

两题都属于GESP一级范围内的“变量输入—算术计算—分支判断—取最值—格式化输出”。

二、共同知识点:多方案比价模型

这类题的固定步骤只有四步:

  1. 读入参数:用int(input())读整数;涉及小数结果再用浮点计算。
  2. 逐方案算价:每种方案写成一个表达式。方案之间互不影响。
  3. 比较取最小:先设第一个方案为当前最优,再用if逐个比;或学有余力用min()。
  4. 按格式输出:整数直接print;要求两位小数用格式化,如print("%.2f" % ans)或print(f"{ans:.2f}")。

GESP Python一级大纲覆盖变量、顺序/分支/循环、算术与比较运算符、输入输出、基础数据类型等 ,上述四步全部在范围内。

三、去旅行:三个整数方案取最小

【提交】

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

【问题描述】

快暑假了,小杨同学正在计划出去旅行,前往目的地的方案多种多样,小杨同学想知道如何前往目的地最便宜。

小杨同学住在 A 市,旅行目的地是 B 市,小杨同学前往目的地有三种方案:

  1. 从 A 市直飞 B 市;
  2. 从 A 市坐高铁到 C 市,然后坐飞机到 B 市;
  3. 从 A 市坐高铁到 C 市,然后坐高铁到 B 市。

请帮小杨同学求出最便宜的出行方案的价格。

【输入描述】

输入包含  行,每行一个正整数:

  • 第  行的正整数表示「从 A 市直飞 B 市」的价格;
  • 第  行的正整数表示「从 A 市坐高铁到 C 市」的价格;
  • 第  行的正整数表示「从 C 市坐飞机到 B 市」的价格;
  • 第  行的正整数表示「从 C 市坐高铁到 B 市」的价格。

【输出描述】

输出一个正整数,表示  种方式中,最便宜的出行方案的价格。

【样例输入1】

999105699588

【样例输出1】

693

【样例解释1】

方案 1. 直飞价格为 ;

方案 2. 高铁转飞机价格为 ;

方案 3. 高铁的价格为 ;

因此最便宜的价格是 。

【样例输入2】

9387

【样例输出2】

9

【样例解释2】

方案 1. 直飞价格为 ;

方案 2. 高铁转飞机价格为 ;

方案 3. 高铁的价格为 ;

因此最便宜的价格是 。

【数据范围】

所有输入均为正整数,且不超过 。

1. 题意简化

输入四行正整数:

  • a:A市直飞B市
  • b:A市高铁到C市
  • c:C市飞机到B市
  • d:C市高铁到B市

三种方案总价:

  • 方案1直飞:p1 = a
  • 方案2高铁+飞机:p2 = b + c
  • 方案3高铁+高铁:p3 = b + d

输出三者最小值。数据均为正整数且不超过10000 。

样例:输入999、105、699、588,三方案为999、804、693,输出693。

2. 一级打擂代码(推荐)

a = int(input())b = int(input())c = int(input())d = int(input())p1 = ap2 = b + cp3 = b + dbest = p1if p2 < best:    best = p2if p3 < best:    best = p3print(best)

逻辑:先认为方案1最便宜,再用方案2、方案3依次挑战;谁更便宜就替换。无列表、无abs、无lambda,纯变量+if,适合零基础。

3. 学有余力简写

a = int(input()); b = int(input()); c = int(input()); d = int(input())print(min(a, b + c, b + d))

min可接受多个参数返回最小值;一级若未讲函数,可先掌握打擂版。

四、商店折扣:两个方案,含条件与小数

【提交】

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

【问题描述】

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

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

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

【输入描述】

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

【输出描述】

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

【样例输入1】

87910

【样例输出1】

3.00

【样例输入2】

87211

【样例输出2】

2.20

【提示】

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

1. 题意简化

输入四个正整数x, y, n, p:

  • 满减方案:若总价p >= x,实付p - y;否则不享受,实付p。满减只用一次。
  • 折扣方案:打n折,实付p * n / 10(即原价乘以n/10)。
  • 两种只能选一种,输出较少金额,保留两位小数。

样例1:8 7 9 10 → 满8减7成立,满减方案10-7=3;折扣方案10×9/10=9;取3.00。样例2:8 7 2 11 → 满减11-7=4;折扣11×2/10=2.2;取2.20。

2. 一级分支代码

x = int(input())y = int(input())n = int(input())p = int(input())# 方案1:满减if p >= x:    price1 = p - yelse:    price1 = p# 方案2:n折price2 = p * n / 10.0# 取较小值if price1 < price2:    ans = price1else:    ans = price2print("%.2f" % ans)

要点:

  • 满减必须先判断p >= x,不满不减,直接付原价。题目明确“满减只能使用一次”,例如33元、满10减3只减3元。
  • 折扣用/10.0或*0.1都会得到浮点数;即使满减结果是整数,最后比较和输出都按小数处理。
  • 输出两位小数为一级常见格式要求,用"%.2f"或f"{ans:.2f}"均可。

3. 若用min简写

x=int(input()); y=int(input()); n=int(input()); p=int(input())price1 = p - y if p >= x else pprice2 = p * n / 10.0print("%.2f" % min(price1, price2))

三元表达式A if 条件 else B属于紧凑写法;零基础可先写完整if-else。

五、两题对照:为什么说是同一知识点

维度
去旅行B4551
商店折扣B4409
方案数
3种
2种
单价类型
全整数
满减可能整数、折扣必小数
条件判断
无阈值,直接加法
满减需p>=x判断
核心操作
算三总价取最小
算两总价取最小
输出格式
正整数
保留两位小数
一级技能
输入、加减、if打擂/ min
输入、加减乘除法、if、浮点格式

结论:只要题目出现“几种方式都能达到目标、要最省钱/最少付款”,模板都是“分别算→比最小→按格式输出”。6月去旅行和9月商店折扣只是方案数量、是否含条件、是否出小数不同。

六、易错点(客观技术向)

  1. 去旅行别漏方案:方案2是b+c、方案3是b+d,不是c+d。
  2. 商店折扣满减别直接p-y:不满x时减成负数或错误低价。
  3. 折扣别写成p*n/10用整数除法出问题:Python 3里p*n/10通常为浮点,但养成写/10.0或先转float(p)更稳。
  4. 保留两位别只round不格式化:round(2.2,2)内部是2.2,打印可能不显示2.20;要用"%.2f"。
  5. 多方案比较别嵌套过多if:打擂法“先best=方案1,再逐个if替换”最清晰,也最不容易写错。

七、小结

GESP一级“最便宜/最少付款”类题的本质不是数学难,而是程序化三步:

  • 输入转变量
  • 每方案一个公式,有阈值就加if
  • 多公式比小,用打擂或min,按题要求输出整数/两位小数

把去旅行和商店折扣各写一遍,再换数据自测,基本可覆盖12月一级同类题。


青少年编程竞赛交流

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

9月真题不新!用6月去旅行对照商店折扣,搞懂GESP一级最便宜问题-第1张图片-四季读书网

抱歉,评论功能暂时关闭!