【GESP】C++二级练习 luogu-B3720 [语言月赛202303] Out for Dinner B
GESP二级练习,多层分支练习,难度★✮☆☆☆。
luogu-B3720 [语言月赛202303] Out for Dinner B
题目要求
题目描述
Bessie 一家今晚要外出就餐。饭馆中只有三种菜,这三种菜的名称分别为
A
、B
、C
。饭店在进行折扣活动。如果我们称消费打 $Y$ 折,则意味着支付金额是菜品金额的 $\dfrac{Y}{10}$ 倍。具体的,如果购买了
B
菜且未购买C
菜,则消费打八折;如果购买了C
菜且未购买B
菜,则消费打七折;如果B
、C
两道菜都购买了,则消费打六折。这一次 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$ 分别是大写英文字母 A
、B
、C
中的一个。
请注意,我们不保证 $a, b$ 一定不相同,这意味着可能出现 $a, b$ 相同的情况。
题目分析
解题思路
- 首先,我们需要理解题目的核心要求:
- 题目涉及三种菜品:A、B、C
- 每次点两道菜(可以相同)
- 折扣规则:
- 点B不点C:八折
- 点C不点B:七折
- 同时点BC:六折
- 其他情况:不打折
- 解题思路:
- 输入消费金额x和两道菜的名称a,b
- 判断折扣条件:
- 如果a和b中同时包含B和C,打六折
- 如果a和b中只包含C(不含B),打七折
- 如果a和b中只包含B(不含C),打八折
- 其他情况不打折
- 计算最终支付金额:
- 六折:price = x × 10 / 6
- 七折:price = x × 10 / 7
- 八折:price = x × 10 / 8
- 不打折:price = x
- 注意:题目保证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各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。