* @author:Avery
* @description:貪心算法求找錢張數最小最優解 還可以優化 在次就不優化了
* @date:2017年7月10日
*/
public class Test {
public static void test(double money){
// 錢面幣 100 50 20 10 5 1 0.5元 0.1元
//double[]n={100,50,20,10,5,1,0.5,0.1};//存放人民幣面額
//int n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0,n9=0;
int n[]=new int[]{0,0,0,0,0,0,0,0};
if((int)(Math.log10(money))+1>=3){
n[0]=(int)(money)/100;//n1存放面值爲100的數量 求餘隻能針對於整數
money-=n[0]*100;
}
if(money>=50){
n[1]=1;
money-=50;
}
if(money>=40){
n[2]=2;
money-=40;
}else if(money>=20){
n[2]=1;
money-=20;
}
if(money>=10){
n[3]=(int)(money)/10;
money-=n[3]*10;
}
if(money>=5){
n[4]=1;
money-=5;
}
if(money>=1){
n[5]=(int)money;
}
if(money<1&&money>=0.5){
n[6]=1;
money-=0.5;
}
if(money>0){
n[7]=(int)(money*10);
}
System.out.println("100的"+n[0]+" 50的"+n[1]+" 20的"+n[2]+" 10的"+n[3]+" 5的"+n[4]+" 1的"+n[5]+" 0.5的"+n[6]+" 0.1的"+n[7]);
int sum=0;
for(int i=0;i<n.length;i++){
sum+=n[i];
}
System.out.println("共"+sum+"張");
}
test(475.8);//4 1 1 1 1 3 共11張
test(325);// 3 1 1 共5
test(11105.5);//111 1 1 共113
}
}