设有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]+"枚"); } } }
时间: 2024-10-03 14:45:00