Making Change UVA, 166

   这道题我们先来想一想:

            在现实生活中,你去买东西,有找零钱找你100的吗??没有!!

            那么我们可以试着从卖家出发考虑问题,把小于最大面值的所有情况枚举出来

int re[41][2]={     //第一个数表示找的零钱,第二个数表示需要的最少的硬币
                  {0,0},
                {5,1},{10,1},{15,2},{20,1},{25,2},{30,2},{35,3},{40,2},
                {45,3},{50,1},{55,2},{60,2},{65,3},{70,2},{75,3},{80,3},
              {85,4},{90,3},{95,4},{100,1},
               {105,2},{110,2},{115,3},{120,2},{125,3},{130,3},{135,4},{140,3},
               {145,4},{150,2},{155,3},{160,3},{165,4},{170,3},{175,4},{180,4},
               {185,5},{190,4},{195,5},{200,1},
  };

              然后加上商品的总额,然后再去和我有的钱进行比较,取最小的就是答案

 代码如下:  (简单粗暴)大笑


#include<cstdio>
#include<cstdlib>
#include<set>
using namespace std;
set<int> it;
set<int> ::iterator p;
int cent[]={5,10,20,50,100,200};
int re[41][2]={
{0,0},
{5,1},{10,1},{15,2},{20,1},{25,2},{30,2},{35,3},{40,2},
{45,3},{50,1},{55,2},{60,2},{65,3},{70,2},{75,3},{80,3},
{85,4},{90,3},{95,4},{100,1},
{105,2},{110,2},{115,3},{120,2},{125,3},{130,3},{135,4},{140,3},
{145,4},{150,2},{155,3},{160,3},{165,4},{170,3},{175,4},{180,4},
{185,5},{190,4},{195,5},{200,1},
};
int cent_num[6];
int main()
{
    int m,n;
    int flag;
    double mon;
    int tol;
    while(scanf("%d",&n)==1)
    {
        m=0;
        flag=0;
        cent_num[0]=n;
        if(n==0)flag++;
        for(int i=1;i<6;i++)
        {
            scanf("%d",&n);
            cent_num[i]=n;
            if(n==0)flag++;
        }
        if(flag==6)break;
        scanf("%lf",&mon);
        n=(int)(mon*100+0.5);//n为总钱数
        for(int i=0;i<41;i++)
        {
            tol=0;
            m=n+re[i][0];
            for(int j=5;j>=0;j--)//从大到小开始
            {
                int k=cent_num[j];
                while(k>0&&m-cent[j]>=0)
                {
                    k--;
                    m-=cent[j];
                    tol++;
                }
                if(m==0)
                {
                    tol+=re[i][1];
                    it.insert(tol);
                }
            }
        }
        p=it.begin();
        printf("%3d\n",*p);
        it.clear();


    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值