换硬币

换硬币

设有n种不同的硬币,各个硬币的面值存在数组w[i]中,现在要用这些硬币来找钱,可以使用各种面值的硬币的个数存于数组s[i]中,设计一个用最少硬币找钱的m的方法。

package 换硬币;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        //给出硬币的面值及个数
        int count =0;
        int w[] = new int[5];
        int s[] = new int[5];
        Scanner input = new Scanner(System.in);
        System.out.println("请输入n:");
        int n = input.nextInt();
        for(int i=0;i<n;i++)
        {
            System.out.println("输入面值:");
            w[i] = input.nextInt();
            System.out.println("输入数量:");
            s[i] = input.nextInt();
            
        }
        
        //把已经有的硬币按照从大到小的顺序存到a1中。
        List a1 = new ArrayList();
        for(int i=0;i<n;i++)
        {
            for(int j = 0;j<s[i];j++)
            {
                a1.add(w[i]+"");
            }
        }
        
        System.out.println("输入钱数:");
        int money = input.nextInt();
        
        //换钱
        //a2负责存储找的钱
        List a2 = new ArrayList();
        for(int i=0;i<a1.size();i++)//循环取钱
        {
            if(money >= Integer.parseInt((String)a1.get(i)))
            {
                a2.add(a1.get(i));//存入到换钱的数列中
                money = money- Integer.parseInt((String)a1.get(i));
                count++;
            }
        }
        
        
        
        
        
        
        //输出结果
        
        System.out.println("至少要用:"+count+"枚,用法如下:");
        int c[] = new int[n];
        for(int i=0;i<n;i++)//按照硬币种类统计使用的次数
        {
            c[i] = Collections.frequency(a2, w[i]+"");
            System.out.println("面值"+w[i]+":"+c[i]+"枚");
        }
        
        

    }

}

 

posted on 2014-12-30 21:14  aicpcode  阅读(179)  评论(0编辑  收藏  举报

导航