top1编程
← 返回题目
题解

童程购物

1 条题解

  • 0
    @ 2026-8-4 10:00:35

    解题思路

    按客户身份(V 贵宾 / C 普通)分两大情况,每种情况里再按购物额分档:

    • VIP:≤500 打 85 折;≤1000 打 8 折;>1000 打 75 折并送大礼包
    • 普通:≤500 打 9 折;>500 仍打 9 折但送大礼包

    用一个 bool 变量记录是否送大礼包,用 double 保存折扣后的金额,最后保留两位小数输出。题目要求用格式化输入输出,所以用 scanf/printf。

    参考代码

    #include <cstdio>
    using namespace std;
    
    int main() {
        char c;
        double x;
        scanf("%c%lf", &c, &x);   // 第一行身份,第二行购物额
        double pay;
        bool gift = false;
        if (c == 'V') {                       // VIP客户
            if (x <= 500) pay = x * 0.85;     // 含500 打85折
            else if (x <= 1000) pay = x * 0.8; // 500~1000 打8折
            else { pay = x * 0.75; gift = true; } // 1000以上75折+大礼包
        } else {                              // 普通客户
            pay = x * 0.9;                    // 都是9折
            if (x > 500) gift = true;         // 500以上送大礼包
        }
        if (gift) printf("YES\n"); else printf("NO\n");
        printf("%.2lf\n", pay);   // 保留两位小数
        return 0;
    }
    

    复杂度分析

    最多判断两次,时间复杂度 O(1),额外空间复杂度 O(1)。

    • 1