/*【程序8】
* 实例:换零钱
* 人民币有100、50、10、5、2、1、0.5、0.2、0.1等多种面额(单位为元)。
* 在补零钱时,可有多种方案,例如需补零钱68.90元,至少可有以下方案:
* 1张50、1张10、1张5、3张1、1张0.5、2张0.2;
* 1张50、1张10、1张5、3张1、1张0.5、4张0.1;
* 6张10、1张5、3张1、1张0.5、2张0.2。
*
* 用贪婪算法求找补零钱方案
*/
import java.util.Scanner;
public class T009 {
public static void exchange(float n){
int[] parvalue = {10000,5000,2000,1000,500,200,100,50,20,10}; // 面值都(*100)
int[] sum = new int[parvalue.length]; // 记录每张面值的所用的数量
int i; // 记录最大面值的位置
for(i=0;i<parvalue.length;i++){
if(n>parvalue[i]){
break; // 得到 i 值
}
}
while(n>0&&i<parvalue.length){ // 贪婪算法
if(n>=parvalue[i]){
n -= parvalue[i];
sum[i]++;
}else if(n<10&&n>=5){
sum[i]++;
break;
}else{
i++;
}
}
for(int k=0; k<parvalue.length;k++){
if(sum[k]!=0){
System.out.println((float)parvalue[k]/100+"\t元零钱的组成 "+sum[k]+" 张");
}
}
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.print("输入找零金额:");
float n = scan.nextFloat();
exchange(n*100);
}
}
运行结果: