BCQM3033 略微复杂的计算,国庆七天乐

BCQM3033 略微复杂的计算,国庆七天乐

应该算第一道对小学生来说,计算逻辑稍微复杂一点的题目。多定义几个变量可能对解题过程更有帮助。

BCQM3033 略微复杂的计算,国庆七天乐

题目要求

描述

给定一个金额(以元为单位,如 345),现在想知道支付该金额的各种面额的人民币数量,显示 100 元,50 元,20 元,10 元,5 元,1 元各多少张,要求尽量使用大面额的钞票。

输入

一个小于 1000 的正整数。

输出

输出分行,每行显示一个整数,从上到下分别表示 100 元,50 元,20元,10 元,5 元,1 元人民币的张数。

输入样例

735

输出样例

7
0
1
1
1
0


题目分析

题目的核心思想是贪心算法,即每次优先使用面额最大的钞票,确保使用尽可能少的张数。


示例代码

#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. 输出结果

    • 程序逐行输出每个面额的钞票张数。

本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权

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

luogu-”系列题目可在 洛谷题库 在线评测。

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

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
最后更新于