洛谷 B4409:[GESP202509 一级] 商店折扣 ← 模拟算法

【题目来源】
https://www.luogu.com.cn/problem/B4409

【题目描述】
商店正在开展促销活动,给出了两种方案的折扣优惠。第一种方案是购物满 x 元减 y 元;第二种方案是直接打 n 折,也就是说价格变为原先的 n/10。这里的 x,y,n 均是正整数,并且 1≤y<x,1≤n<10。
需要注意的是,第一种方案中满减优惠只能使用一次。例如购物满 10 元减 3 元时,若挑选了价格总和为 33 元的物品,只能减免 3 元,需要支付 30 元。
小明在商店挑选了价格总和为 p 元的物品,结账时只能使用一种优惠方案。小明最少需要支付多少钱呢?

【输入格式】
四行,四个正整数 x,y,n,p,含义见题目描述。

【输出格式】
一行,一个小数,表示小明最少需要支付多少钱,保留两位小数。

【输入样例】
8
7
2
11

【输出样例】
2.20

【数据范围】
对于所有测试点,保证 1≤y<x≤100,1≤n<10,1≤p≤100。

【算法分析】
本题看似简单,实则一堆坑点。
(1)使用“购物满 x 元减 y 元”的方案,前提是 p>=x,且只能使用一次。
(2)使用“直接打 n 折”的方案,注意要乘以 0.1,以保证得到的是浮点数。
(3)使用 float v=p; 将 v 初始化为 p。
(4)将浮点数的运算,能用加减,不要用乘除。

【算法代码】

#include <bits/stdc++.h>
using namespace std;

int main() {
    int x,y,n,p;
    cin>>x>>y>>n>>p;
    float u=p*n*0.1;
    float v=p;
    if(p>=x) v=p-y;

    if(u<v) printf("%.2f",u);
    else printf("%.2f",v);

    return 0;
}

/*
in:
8
7
2
11

out:
2.20
*/





【参考文献】
https://www.luogu.com.cn/problem/solution/B4409

 

posted @ 2025-11-21 21:00  Triwa  阅读(66)  评论(0)    收藏  举报