純屬無聊玩貪心

package test;

/**
 * @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+"張");
}

public static void main(String[] args) {
 test(475.8);//4 1 1 1 1 3 共11張
 test(325);// 3 1 1  共5
 test(11105.5);//111  1  1  共113
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章