• 大家一起数钢镚


    题目描述

    Nova君在经历双十一风暴后,不得不靠在一家便利店打工来维持生计。作为一名合格的收银员,必须快速的计算价格并找钱个顾客。Nova君是个十足的硬币控,喜欢金属色闪闪的硬币,所以找钱是都希望用尽可能少的硬币。现在,假设收银台有面值为1元、5元、10元、50元、100元、500元的硬币各Ai、Bi、Ci、Di、Ei、Fi 个,需要找的钱的数额为A元,那最少需要多少个硬币呢?假定至少存在一种找钱方案。

    被jhljx附体而不会数数Nova君求助中......

    输入

    多组测试数据(组数不超过10),对于每组数据,输入两行,第一行为6个正整数,分别代表1元、5元、10元、50元、100元、500元的硬币个数,第二行为一个正整数A,代表需要支付的钱数。所有正整数都在INT范围内。

    输出

    对于每组数据,输出一行,为最少的硬币数量

    输入样例

    3 2 1 3 0 2
    620

    输出样例

    6

    Hint

    放轻松,签到题~
    题目来源:http://biancheng.love/contest/23/problem/A/index

    解题方法:贪心算法
    根据题目需要得到最少的硬币个数(不要问我问什么会有那么大面值的硬币)。考虑一种很实际的问题,比如说你去超市购物,营业员需要找零50元,那么你肯定不希望营业员找给你的钱都是1毛1毛钱。也不想都是1块1块。一般的营业员可能找零50面额的,也可能是10张5元的,或者25张2元的(好久没见过两元纸币了)等等方法。可以看出来找零最少的肯定是直接给一张50元。这就是我们很实际的贪心问题。因此营业员在找零的时候先去拿面值最大的并且小于找零。当满足条件之后,将找零数目减去适合的最大面值,再次进行上述操作,直到找零结束。这样的方法是很实际的贪心问题的应用。
    贪心算法的博客推荐:http://www.cnblogs.com/chinazhangjie/archive/2010/11/23/1885330.html
    下面给出本题的代码:
     1 #include<iostream>
     2 
     3 using namespace std;
     4 int main()
     5 {
     6     int a[7];
     7     int b[7]={0,1,5,10,50,100,500};
     8     int num;
     9     while(cin>>a[1]){
    10     int ans=0;
    11     for(int i=2;i<=6;i++)
    12         cin>>a[i];
    13     cin>>num;
    14     for(int i=6;i>=1;i--)
    15     {
    16         while(num-b[i]>=0&&a[i]>0)
    17         {
    18             a[i]--;
    19             ans++;
    20             num-=b[i];
    21         }
    22     }
    23     cout<<ans<<endl;
    24     }
    25 }
  • 相关阅读:
    Fixed Table Header jQuery Plugin
    jquery实现置顶和置底特效
    HTTP_REFERER头的使用方法
    为什么使用框架?
    javascript:history的一些用法
    揭秘BYOD五大隐藏成本
    PHP中冒号、endif、endwhile、endfor使用介绍
    面对业务开拓重任,CIO们普遍显得缺乏信心
    Asp.net中的页面传值
    DropDownList的用法
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/5002017.html
Copyright © 2020-2023  润新知