1 条题解

  • 0
    @ 2025-5-19 8:21:55

    题目解析

    题意分析

    这道题目要求我们计算如何用最少数量的硬币(0.250.25美元、0.100.10美元、0.050.05美元和0.010.01美元)来凑出给定的找零金额(以美分为单位)。具体规则如下:

    1. 输入

      • 第一行是测试数据集的数量 NN1N1001 \leq N \leq 100
      • 每个测试数据是一个整数 CC1C5001 \leq C \leq 500),表示需要找零的金额(单位:美分)
    2. 输出

      • 对每个测试数据,输出数据集编号和最少硬币的组合,包括:
        • QQ0.250.25美元硬币的数量
        • DD0.100.10美元硬币的数量
        • nn0.050.05美元硬币的数量
        • PP0.010.01美元硬币的数量
    3. 约束条件

      • 必须使用最少数量的硬币
      • 找零金额不超过5.005.00美元(即500500美分)

    解题思路

    1. 贪心算法:这是一个典型的贪心算法问题。为了用最少数量的硬币凑出给定的金额,我们应该优先使用面值较大的硬币。
    2. 硬币面值
      • 0.250.25美元(2525美分)
      • 0.100.10美元(1010美分)
      • 0.050.05美元(55美分)
      • 0.010.01美元(11美分)
    3. 计算步骤
      • 从最大的面值(2525美分)开始,计算最多能用多少个该面值的硬币:Q=C//25Q = C // 25
      • 计算剩余金额:C=C%25C = C \% 25
      • 1010美分硬币:D=C//10D = C // 10
      • 剩余金额:C=C%10C = C \% 10
      • 55美分硬币:n=C//5n = C // 5
      • 剩余金额即为11美分硬币数量:P=C%5P = C \% 5

    标程

    #include <iostream>
    using namespace std;
    int main()
    {
        int n,m;
        cin>>n;
        int i=1;
        while(n--)
        {
            cin>>m;
            int a=0,b=0,c=0,d=0;
            if(m>=25)
            {
                a+=m/25;
                m=m%25;
            }
            if(m>=10&&m<25)
            {
                b+=m/10;
                m=m%10;
            }
            if(m>=5&&m<10)
            {
                c+=m/5;
                m=m%5;
            }
            if(m>0&&m<5)
            {
                d+=m;
            }
            cout<<i++<<" "<<a<<" QUARTER(S), "<<b<<" DIME(S), "<<c<<" NICKEL(S), "<<d<<" PENNY(S)"<<endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    2086
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    8
    已通过
    1
    上传者