ACM程序设计大赛-------- 最少钱币数(Java代码)

来源:互联网 发布:矢量图编辑软件 编辑:程序博客网 时间:2024/06/11 06:52
【问题描述】 
         这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了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  

【样例输出】

Impossible

import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class ACM {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);List<Integer> result=new ArrayList<Integer>();int typeNum=0;int money=0;boolean isOK=true;System.out.println("请输入一个待凑钱币,输入0结束");while(isOK){try {money=scan.nextInt();isOK=false;} catch (Exception e) {// TODO: handle exceptionSystem.out.println("输入有误,请重新输入一个正整数");isOK=true;}}while(money!=0){int count=0;System.out.println("请输入货比种类数");isOK=true;while(isOK){try {typeNum=scan.nextInt();isOK=false;} catch (Exception e) {// TODO: handle exceptionSystem.out.println("输入有误,请重新输入一个正整数");isOK=true;}}int[] type=new int[typeNum];System.out.println("请输入货币面值");for (int i = 0; i < type.length; i++) {type[i]=scan.nextInt();}   type=reverse(type);for (int i = 0; i < type.length; i++) {while(money/type[i]!=0){money-=type[i];count++;}}result.add(count);System.out.println("请输入一个待凑钱币,输入0结束");isOK=true;while(isOK){try {money=scan.nextInt();isOK=false;} catch (Exception e) {// TODO: handle exceptionSystem.out.println("输入有误,请重新输入一个正整数");isOK=true;}}}       for (int i = 0; i < result.size(); i++) {     if(result.get(i).intValue()==0){     System.out.println("Impossible ");     }else{     System.out.println(result.get(i).intValue());     }    }} public static int[] reverse(int[] arr) {int temp=0;for (int i = 0; i < arr.length; i++) {for (int j = i; j < arr.length; j++) {if(arr[i]<arr[j]){temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}return arr;}}


0 0
原创粉丝点击