专栏文章
B4409 [GESP202509 一级] 商店折扣
B4409题解参与者 11已保存评论 12
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mink770q
- 此快照首次捕获于
- 2025/12/02 03:45 3 个月前
- 此快照最后确认于
- 2025/12/02 03:45 3 个月前
欢迎报名洛谷网校,期待和大家一起进步!
在这里,小明有两种选择,我们只需要分别计算出每种方案下他需要支付的金额,然后取其中较小的一个作为最终答案即可。
首先,我们来看第一种方案:满 元减 元。这是一个有条件的优惠。我们需要先判断小明挑选的物品总价 是否达到了满减的门槛 。如果 大于或等于 ,那么他就可以享受优惠,实际需要支付的金额就是 。反之,如果他的总价 还没有达到 ,那么这个优惠就无法使用,他需要支付原价 。
接着,我们分析第二种方案:直接打 折。打 折的意思是,最终价格是原价的 。所以,在这种方案下,小明需要支付的金额就是 。这里需要特别注意,为了得到一个精确的小数结果,我们在计算时应该使用 而不是 ,这样可以确保 C++ 进行的是浮点数除法,而不是会丢失小数部分的整数除法。
现在,我们已经分别计算出了两种方案下需要支付的金额。最后一步,就是比较这两个金额的大小,选择那个更小的值,就是小明最少需要支付的钱。由于最终结果要求保留两位小数,我们在输出时可以使用 C++ 的格式化输出功能来实现,也可以使用
printf("%.2lf") 的形式实现。参考代码:
CPP// c1 代表方案一的最终价格
double c1;
if (p >= x) c1 = p - y; // 满足条件,减去 y
else c1 = p;
// c2 代表方案二的最终价格
double c2 = p * (n / 10.0);
// ans 是两种方案中的最低价格
double ans = min(c1, c2);
cout << fixed << setprecision(2) << ans << endl;
// 也可以写作:printf("%.2lf", ans);
相关推荐
评论
共 12 条评论,欢迎与作者交流。
正在加载评论...
