zoukankan      html  css  js  c++  java
  • 1031: 最少钱币数

    1031: 最少钱币数

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 156  解决: 127
    [提交][状态][讨论版]

    题目描述

            这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了 6 种钱币面值为 2、5、10、20、50、100,用来凑 15 元,可以用 5 个 2 元、1个 5 元,或者 3 个 5 元,或者 1 个 5 元、1个 10 元,等等。显然,最少需要 2 个钱币才能凑成 15 元。
            你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。

    输入

    输入可以有多个测试用例。每个测试用例的第一行是待凑的钱数值 M(1 <= M<= 2000,整数),接着的一行中,第一个整数 K(1 <= K <= 10)表示币种个数,随后是 K个互不相同的钱币面值 Ki(1 <= Ki <= 1000)。输入 M=0 时结束。

    输出

    每个测试用例输出一行,即凑成钱数值 M 最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。

    样例输入

    15
    6 2 5 10 20 50 100
    1
    1 2
    0

    样例输出

    2
    Impossible

    提示

     

    来源

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int main(){
     int money,n,i,s,a[10];
     while(cin>>money){
      s=0;
      if(money==0) break;
      cin>>n;
      for(i=0;i<n;i++){
       cin>>a[i];
      }
      sort(a,a+n);
      for(i=n-1;i>=0;i--){
       if(money>=a[i]){
        s=s+money/a[i];
        money=money%a[i];
       }
       if(money==0) break;
      }
      if(money!=0) cout<<"Impossible"<<endl;
      else cout<<s<<endl;
     }
     
     
     return 0;
    }

    以上是错误解法,正确解法请参考:

    http://blog.csdn.net/kenden23/article/details/16864987

  • 相关阅读:
    用记事本编写一个Servlet项目
    Servlet开发(一)
    41、java与mysql乱码的问题
    40、JDBC相关概念介绍
    mysql-5.7.12-winx64安装版配置、使用
    39、集合线程安全问题
    38、各Set实现类的性能分析
    电脑取随机数是什么原理,是真正的随机数吗?转自知乎.
    创建Car类,实例化并调用Car类计算运输的原料量是否足够
    用Random类输出验证码
  • 原文地址:https://www.cnblogs.com/lchzls/p/5781685.html
Copyright © 2011-2022 走看看