202509-商店折扣(luogu-B4409)
GESP C++ 2025年9月一级真题,基础语句练习,难度★☆☆☆☆。
luogu-B4409 [GESP202509 一级] 商店折扣
题目要求
题目描述
商店正在开展促销活动,给出了两种方案的折扣优惠。第一种方案是购物满 元减 元;第二种方案是直接打 折,也就是说价格变为原先的 。这里的 均是正整数,并且 ,。
需要注意的是,第一种方案中满减优惠只能使用一次。例如购物满 元减 元时,若挑选了价格总和为 元的物品,只能减免 元,需要支付 元。
小明在商店挑选了价格总和为 元的物品,结账时只能使用一种优惠方案。小明最少需要支付多少钱呢?
输入格式
四行,四个正整数 ,含义见题目描述。
输出格式
一行,一个小数,表示小明最少需要支付多少钱,保留两位小数。
输入输出样例 #1
输入 #1
8
7
9
10
输出 #1
3.00
输入输出样例 #2
输入 #2
8
7
2
11
输出 #2
2.20
说明/提示
对于所有测试点,保证 ,,。
题目分析
商店给出两种互斥优惠:满减(满 减 ,仅一次)与直接打 折。
目标是让总价 在这两种方案中花最少的钱。
方案一(满减)
若 ,则实付 ;否则无法享受,实付 。方案二(折扣)
实付 ,注意结果可能是小数。取最优
比较两种方案的实付金额,选较小者即可。复杂度
仅常数次运算,时间 ,空间 。输出细节
结果保留两位小数,C++ 可用printf("%.2f", ans)
或cout << fixed << setprecision(2) << ans
。
示例代码
#include <iostream>
#include <cstdio>
int main() {
int x, y, n, p;
std::cin >> x >> y >> n >> p; // 读入四个正整数:满减门槛x、减免金额y、折扣n、总价p
int plan_one = p >= x ? p - y : p; // 方案一:若满x元则减y元,否则原价
double plan_two = p / 10.0 * n; // 方案二:直接打n折,即总价乘以n/10
double result = plan_one > plan_two ? plan_two : plan_one; // 取两种方案中更便宜的一个
printf("%.2f", result); // 保留两位小数输出最少需支付的金额
return 0;
}
本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

最后更新于