题目描述
商店正在开展促销活动,给出了两种方案的折扣优惠。第一种方案是购物满 x 元减 y 元;第二种方案是直接打 n 折,也就是说价格变为原先的 n/10。这里的 x,y,n 均是正整数,并且 1≤y<x,1≤n<10。
需要注意的是,第一种方案中满减优惠只能使用一次。例如购物满 10 元减 3 元时,若挑选了价格总和为 33 元的物品,只能减免 3 元,需要支付 30 元。
小明在商店挑选了价格总和为 p 元的物品,结账时只能使用一种优惠方案。小明最少需要支付多少钱呢?
输入格式
四行,四个正整数 x,y,n,p,含义见题目描述。
输出格式
一行,一个小数,表示小明最少需要支付多少钱,保留两位小数。
输入输出样例
输入 #1
8 7 9 10
输出 #1
3.00
输入 #2
8 7 2 11
输出 #2
2.20
说明/提示
对于所有测试点,保证 1≤y<x≤100,1≤n<10,1≤p≤100。
考纲知识点
分支结构、基本运算、输入输出语句
解题思路
-
满减方案(方案一):当购物总金额 p 大于等于满减门槛 x 时,可减免 y 元;若 p 小于 x,则无法使用满减,需支付原价 p。
-
折扣方案(方案二):直接按原价的 n/10 计算最终支付金额(例如 n=9 对应 9 折,即原价的 90%)。
-
比较两种方案的结果,取较小值,并按要求保留两位小数输出。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int x, y, n, p;
cin >> x >> y >> n >> p;
double a1, a2;
// 方案一:满减
if (p >= x) {
a1 = p - y;
} else {
a1 = p;
}
// 方案二:折扣
a2 = p * n / 10.0;
// 取最小值
double min_pay = (a1 < a2) ? a1 : a2;
// 保留两位小数输出
cout << fixed << setprecision(2) << min_pay << endl;
return 0;
}