• 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

  • 相关阅读:
    计数基础
    2022联合省选退役记
    2022联合省选题解
    npm 镜像设置和查看
    createreactapp
    kill 查詢
    联合省选2022 "没得游" 记
    现役划水 4
    【学习笔记】错排问题
    【考试总结】20220412
  • 原文地址:https://www.cnblogs.com/lchzls/p/5781685.html
Copyright © 2020-2023  润新知