文章

【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;
}

代码分析

  1. 输入和初始化
    • scanf("%d", &a);:从用户输入一个整数 a,表示金额(单位:元)。
    • int rest:用于保存每次计算后剩下的钱数。
  2. 100元的张数
    • int b = a / 100;:用总金额 a 除以100,得到需要使用的100元钞票的张数 b
    • rest = a % 100;:使用模运算得到除去100元钞票后的剩余金额 rest
  3. 50元的张数
    • int c = rest / 50;:用剩余的金额 rest 除以50,得到需要使用的50元钞票的张数 c
    • rest = rest % 50;:模运算得到剩余金额。
  4. 20元的张数
    • int d = rest / 20;:用剩余金额除以20,得到20元钞票的张数 d
    • rest = rest % 20;:计算出剩下的金额。
  5. 10元的张数
    • int e = rest / 10;:用剩余金额除以10,得到10元钞票的张数 e
    • rest = rest % 10;:模运算得到剩下的金额。
  6. 5元的张数
    • int f = rest / 5;:用剩余金额除以5,得到5元钞票的张数 f
    • rest = rest % 5;:计算出剩余金额。
  7. 1元的张数
    • 剩下的rest就是1元的张数。
  8. 输出结果
    • 程序逐行输出每个面额的钞票张数。

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

本文由作者按照 CC BY 4.0 进行授权