贪心算法实例:找零钱(Java实现)

/**********从桌面txt文件里读取零钱数目以及需要找的钱总额然后利用贪心算法求解之后重新生成txt文件******************************************************************

import java.io.*;
public class GreedySelect
{
 public GreedySelect( String file)throws IOException
 {
    try
    {
     this.file=file;
     FileReader reader=new FileReader(file);
     BufferedReader Breader=new BufferedReader(reader);
     String s=Breader.readLine();
    int i,j;
    change=new Change[10];
    int k=0;
    while(s!=null)
   {
    j=0;
    i=0;
    String[] temp=new String[9];
    temp=s.split("//s");
    change[k]=new Change();
    while(i<6)
    {
      int num=Integer.parseInt(temp[i]);
      if(num==0) j++;
      change[k].coins[i]=num;
      i++;
    }
    if(j==5)  break;
    double money=Double.parseDouble(temp[i])*100;
    change[k].money=(int)money;
     k++;
     s=Breader.readLine();
   }
    client=k-1;
    Breader.close();
  
  }
  catch(IOException e )
  {
   e.printStackTrace();
  }
 
 }
 public void greedySort()//核心代码,贪心求解
 {
  double money;
  double temp=0;
  for(int i=0;i<client;i++)
  {
   System.out.println(change[i]);
   money=change[i].money;
   for(int j=5;j>=0;j--)
   {
    if(j==5) temp=200;
    else if(j==4) temp=100;
    else if(j==3) temp=50;
    else if(j==2) temp=20;
    else if(j==1) temp=10;
    else if(j==0) temp=5;
    if(money>=temp&&change[i].coins[j]>0)
    {
     money-=temp;
     change[i].needCoins[j]++;
   
     change[i].coins[j]--;
     if(money>=temp&&change[i].coins[j]>0)
      j++;
    
    
    
    }
   
   
   }
  
   if(money!=0) change[i].successful=false;
   else change[i].successful=true;
  }
 }
 public void saveResult()throws IOException//保存解决方案文件到桌面
 {
 try
 {
  FileWriter fileW=new FileWriter("C://Documents and Settings//Administrator//桌面/      /solution.txt");
  PrintWriter writer=new PrintWriter(fileW);
  for(int i=0;i<client;i++)
  {
   if(change[i].successful)
   {
    writer.println("顾客 "+i+" 需要 "+change[i].money+"找零钱如下:");
      for(int j=0;j<6;j++)
        {
     int k=change[i].needCoins[j];
           if(k>0)
             if(j==0) writer.println("五分: "+k);
          else if(j==1) writer.println("一角: "+k);
          else if(j==2) writer.println("两角: "+k);
          else if(j==3) writer.println("五角: "+k);
          else if(j==4) writer.println("一元:"+k);
          else if(j==5) writer.println("一元:"+k);
         
     }
   }
   else
   {
    writer.println("顾客 "+i+"无法完成");
   }
  }
  writer.close();
 }
 catch(IOException e)
 {
  e.printStackTrace();
 }
 }
 private int client;
 private Change[] change;
 private String file;
  private class Change
  {
  public Change()//定义顾客问题类
 {
  coins=new int[6];
  needCoins=new int[6];
  successful=false;
  money=0;
 }
  public int[] coins;
 public int[] needCoins;
 public int money;
 public boolean successful;
 
  }
}

你可能感兴趣的:(贪心算法实例:找零钱(Java实现))