1 条题解

  • 0
    @ 2025-9-15 23:48:24

    C

    说明

    本题要求将给定金额分解为100元、50元、20元、10元、5元、1元的钞票张数,且遵循“尽量使用大面额”的原则。核心思路是从大到小依次计算每种面额的张数

    1. 对每种面额,用当前剩余金额除以面额得到张数(整数除法,自动取商);
    2. 用取模运算更新剩余金额(剩余金额 = 剩余金额 % 面额);
    3. 按100→50→20→10→5→1的顺序依次计算,最后逐行输出张数。

    整个过程为6次除法和取模运算,时间复杂度O(1),适合处理小于1000的金额。

    代码

    #include <stdio.h>
    
    int main() {
        int money;
        // 读取输入金额
        scanf("%d", &money);
        
        // 计算100元张数,更新剩余金额
        int a = money / 100;
        money %= 100;
        
        // 计算50元张数,更新剩余金额
        int b = money / 50;
        money %= 50;
        
        // 计算20元张数,更新剩余金额
        int c = money / 20;
        money %= 20;
        
        // 计算10元张数,更新剩余金额
        int d = money / 10;
        money %= 10;
        
        // 计算5元张数,更新剩余金额
        int e = money / 5;
        money %= 5;
        
        // 1元张数为剩余金额
        int f = money;
        
        // 按顺序输出各面额张数
        printf("%d\n%d\n%d\n%d\n%d\n%d\n", a, b, c, d, e, f);
        return 0;
    }
    

    C语言拓展知识

    推荐搜索:整数除法与取模运算的配合使用(分解金额的通用方法)、多变量输出时printf的格式控制(换行符的使用)、从大到小贪心策略在类似问题中的应用(如硬币找零)。

    C++

    说明

    本题逻辑与C语言完全一致(从大到小计算各面额张数),C++通过输入输出流简化代码,无需格式控制符,同时保留相同的贪心计算逻辑,代码更简洁直观。

    新知识

    1. 贪心策略应用:
      • 术语:从大面额到小面额依次计算
      • 解释:通过“先尽可能用大面额,再处理剩余金额”的贪心思路,确保使用的总张数最少,且符合题目“尽量使用大面额”的要求。例如735元先分7张100元,剩余35元再分1张20元,以此类推。
      • 对比:C和C++实现思路相同,但C++的输入输出更简洁,无需关注格式字符串。

    AC

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int money;
        // 读取输入金额
        cin >> money;
        
        // 计算100元张数,更新剩余金额
        int a = money / 100;
        money %= 100;
        
        // 计算50元张数,更新剩余金额
        int b = money / 50;
        money %= 50;
        
        // 计算20元张数,更新剩余金额
        int c = money / 20;
        money %= 20;
        
        // 计算10元张数,更新剩余金额
        int d = money / 10;
        money %= 10;
        
        // 计算5元张数,更新剩余金额
        int e = money / 5;
        money %= 5;
        
        // 1元张数为剩余金额
        int f = money;
        
        // 按顺序输出各面额张数
        cout << a << endl << b << endl << c << endl << d << endl << e << endl << f << endl;
        return 0;
    }
    

    C++拓展知识

    推荐搜索:贪心算法在货币找零问题中的适用性(为何适用于人民币面额)、C++中endl\n在多换行输出中的差异、整数运算在金额分解中的精度优势(对比浮点数)。

    • 1

    信息

    ID
    258
    时间
    60ms
    内存
    10MiB
    难度
    6
    标签
    递交数
    24
    已通过
    12
    上传者