【GESP】C++一级练习BCQM3033,略微复杂的计算,国庆七天乐
应该算第一道对小学生来说,计算逻辑稍微复杂一点的题目。多定义几个变量可能对解题过程更有帮助。
BCQM3033
题目要求
描述
给定一个金额(以元为单位,如 345),现在想知道支付该金额的各种面额的人民币数量,显示 100 元,50 元,20 元,10 元,5 元,1 元各多少张,要求尽量使用大面额的钞票。
输入
一个小于 1000 的正整数。
输出
输出分行,每行显示一个整数,从上到下分别表示 100 元,50 元,20元,10 元,5 元,1 元人民币的张数。
输入样例
735
输出样例
7
0
1
1
1
0
—
题目分析
题目的核心思想是贪心算法,即每次优先使用面额最大的钞票,确保使用尽可能少的张数。
代码参考
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
#include <cstdio>
int main() {
int a;
scanf("%d", &a);
// 100的张数
int b = a / 100;
int rest = a % 100;
printf("%d\n", b);
// 50 的张数
int c = rest / 50;
rest = rest % 50;
printf("%d\n", c);
// 20 的张数
int d = rest / 20;
rest = rest % 20;
printf("%d\n", d);
// 10 的张数
int e = rest / 10;
rest = rest % 10;
printf("%d\n", e);
// 5 的张数
int f = rest / 5;
rest = rest % 5;
printf("%d\n", f);
// 1 的张数
printf("%d", rest);
return 0;
}
代码分析
- 输入和初始化:
scanf("%d", &a);
:从用户输入一个整数a
,表示金额(单位:元)。int rest
:用于保存每次计算后剩下的钱数。
- 100元的张数:
int b = a / 100;
:用总金额a
除以100,得到需要使用的100元钞票的张数b
。rest = a % 100;
:使用模运算得到除去100元钞票后的剩余金额rest
。
- 50元的张数:
int c = rest / 50;
:用剩余的金额rest
除以50,得到需要使用的50元钞票的张数c
。rest = rest % 50;
:模运算得到剩余金额。
- 20元的张数:
int d = rest / 20;
:用剩余金额除以20,得到20元钞票的张数d
。rest = rest % 20;
:计算出剩下的金额。
- 10元的张数:
int e = rest / 10;
:用剩余金额除以10,得到10元钞票的张数e
。rest = rest % 10;
:模运算得到剩下的金额。
- 5元的张数:
int f = rest / 5;
:用剩余金额除以5,得到5元钞票的张数f
。rest = rest % 5;
:计算出剩余金额。
- 1元的张数:
- 剩下的
rest
就是1元的张数。
- 剩下的
- 输出结果:
- 程序逐行输出每个面额的钞票张数。
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
本文由作者按照 CC BY 4.0 进行授权