文章

【GESP】C++二级练习 luogu-B3720 [语言月赛202303] Out for Dinner B

GESP二级练习,多层分支练习,难度★✮☆☆☆。

luogu-B3720 [语言月赛202303] Out for Dinner B

题目要求

题目描述

Bessie 一家今晚要外出就餐。饭馆中只有三种菜,这三种菜的名称分别为 ABC

饭店在进行折扣活动。如果我们称消费打 $Y$ 折,则意味着支付金额菜品金额的 $\dfrac{Y}{10}$ 倍。具体的,如果购买了 B 菜且未购买 C 菜,则消费打八折;如果购买了 C 菜且未购买 B 菜,则消费打七折;如果 BC 两道菜都购买了,则消费打六折

这一次 Bessie 一家人只点了两道菜。这两道菜可能是相同的。最终结账时,菜品金额是 $x$ 元。给定两道菜的名字和 $x$,请你求出 Bessie 的支付金额

输入格式

输入共两行。

第一行为一个整数 $x$,代表 Bessie 一家的消费金额

第二行为两个大写英文字母 $a, b$,代表 Bessie 一家点的两道菜的名称。

输出格式

输出共一行一个整数,代表 Bessie 一家这一次在打折后需要支付多少钱。

输入 #1

1
2
100
AB

输出 #1

1
80

输入 #2

1
2
100
CA

输出 #2

1
70

说明/提示

样例 1 解释

Bessie 一家如果购买了 B 菜且未购买 C 菜,整次消费会打八折。他们本次未打折前需要支付 $100$ 元,因此打折后需要支付 $100 \times 80\% = 80$ 元。

数据规模与约定

对于 $100\%$ 的数据,保证 $10 \leq x \leq 10 ^ {18}$ 且 $x$ 是 $10$ 的倍数,$a, b$ 分别是大写英文字母 ABC 中的一个。

请注意,我们不保证 $a, b$ 一定不相同,这意味着可能出现 $a, b$ 相同的情况。


题目分析

此题是一道标准的多重分支(if-else)练习题。

题目给出三种菜品 A、B、C,每次点两道菜(可相同),根据所点菜品的组合决定折扣。核心在于准确理解并实现以下折扣规则:

  1. 同时点了 B 和 C:打六折,即 price = x / 10 * 6
  2. 点了 C 但没点 B:打七折,即 price = x / 10 * 7
  3. 点了 B 但没点 C:打八折,即 price = x / 10 * 8
  4. 既没点 B 也没点 C(如 AA):不打折,即 price = x

判断”是否点了某道菜”的方法是:检查两道菜 ab是否有一个等于该字母,例如 a == 'B' || b == 'B'。注意判断顺序很重要——必须先判断六折(B 和 C 都有),再判断七折和八折,否则会被提前匹配走。

另外需要注意,$x$ 最大可达 $10^{18}$,超出了 int 的范围,需要使用 long long 类型。题目保证 $x$ 是 10 的倍数,因此先除后乘不会丢失精度。


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
using namespace std;
int main() {
    // 定义变量x存储消费金额
    long long x;
    cin >> x;
    // 定义变量a,b存储两道菜的名称
    char a, b;
    cin >> a >> b;
    // 定义变量price存储最终支付金额
    long long price;
    // 如果同时点了B和C,打6折
    if ((a == 'B' || b == 'B') && (a == 'C' || b == 'C')) {
        price = x / 10 * 6;
    }
    // 如果只点了C,打7折
    else if ((a == 'C' || b == 'C')) {
        price = x / 10 * 7;
    }
    // 如果只点了B,打8折
    else if ((a == 'B' || b == 'B')){
        price = x / 10 * 8;
    }
    // 其他情况不打折
    else {
        price = x;
    }
    // 输出最终支付金额
    cout << price;
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP 学习专题站:GESP WIKI

"luogu-"系列题目可在洛谷题库进行在线评测。

"bcqm-"系列题目可在编程启蒙题库进行在线评测。

欢迎加入Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答

欢迎加入C++ GESP/CSP认证学习QQ频道,考试资源总结汇总

欢迎加入C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权