输入两行,第一行为5个数字,分别代表1,2,10,50,100纸币的数量
譬如:5 2 2 3 5
第二行输入要支付的金额,
如:55
额题不太好找了,中午拍了照片还有凑合看看哈,
这个是一个简单的动态规划问题,难度还可以吧,代码如下
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("币的数量:");
int n1 = scn.nextInt();
int n2 = scn.nextInt();
int n3 = scn.nextInt();
int n4 = scn.nextInt();
int n5 = scn.nextInt();
System.out.println("--"+n1+","+n2+","+n3+","+n4+","+n5);
System.out.println("要支付的金额");
int n6 = scn.nextInt();
System.out.println("支付的是"+n6+"元");
int[] money = {1,5,10,50,100};
int[] moneyNum = {n1,n2,n3,n4,n5};
int count = 0; //需要付款的纸币数目
for(int i=money.length-1;i>=0;i--){ //从最大面额的纸币开始选择,面额大小已经按照升序排列
while (n6>=money[i] && moneyNum[i]>0){
n6 -= money[i]; //总额减去当前最大的纸币额度值
moneyNum[i] -= 1;
count += 1;
}
}
if(n6 <= (n1*1+n2*5+n3*10+n4*50+n5*100)) {
if (count != 0) {
System.out.println("最少需要的纸币数量:" + count);
} else if (count == 0) {
System.out.println("无解:-1");
}
}else {
System.out.println("无解:-1");
}
}
}
主要是这个for和while,可以自己在纸上写一下,我的话,用了debug,嗯!!!! idea真香啊