//从键盘上输入一件物品的价格(范围是:0.10~5.00元),假设用户支付了一张5元的纸币
//请列出一种找零钱的方案,使得纸币及硬币的个数最少。import java.io.*;
import java.lang.Throwable.*;
class MyException extends Exception{
public MyException(){
super("输入的价格有误");
}
}public class Money
{
 public static double money( double value)throws
   MyException{
    if(value<0.10||value>5.00)  
    throw new MyException();
    value=5-value;
    if(value>=2)
      {
    System.out("请先收好2元零钱!");
    value=value-2;
      }
    else if(value>=1)
      {System.out("请先收好1元零钱!");
      value=value-1;
      }
       else if(value>0.5)
        {System.out("请先收好0.5元零钱!");
        value=value-0.5;
        }
        else if(value>=0.2)
         {System.out("请先收好0.2元零钱!");
         value=value-0.2;
         }
            else 
              {System.out("请收好0.1元零钱!");}      
    return(value);
   }
 
 
 public static void main(String args[])
 {
  double value=0,money;
  int n=5;
  try{
  System.out.println("请输入物品的价格 $=:");
  BufferedReader br=
                     new BufferedReader(new InputStreamReader(System.in));
                     String s=br.readLine();
                     value=Integer.parseInt(s);  
        money=money(value);
     }
  catch(MyException e)
     {
  System.out.println(e.toString());
  System.exit(-1);
     }
System.out.println("找回的零钱为"+money);
 }
}

解决方案 »

  1.   


    public static double money( double value)throws 
       MyException{ 
        if(value <0.10 ¦ ¦value>5.00)   
        throw new MyException(); 
        value=5-value; 
        double value1 = value;
        while(value>0) {
        if(value>=2) 
          { 
        System.out("请先收好2元零钱!"); 
        value=value-2; 
          } 
        else if(value>=1) 
          {System.out("请先收好1元零钱!"); 
          value=value-1; 
          } 
           else if(value>0.5) 
            {System.out("请先收好0.5元零钱!"); 
            value=value-0.5; 
            } 
            else if(value>=0.2) 
             {System.out("请先收好0.2元零钱!"); 
             value=value-0.2; 
             } 
                else  
                  {System.out("请收好0.1元零钱!");
       }   
        return(value1); 
       } 
      

  2.   


    public class test { 
    public static void main(String []args){
    test.money(4.10f);
    }
    public static void money(float money){
    int temp = (int)(money*100);
    System.out.println("找零:"+money);
    System.out.println("找零:"+temp);
    System.out.println("二元:"+temp/200+"张");
    temp=temp%200;
    System.out.println("一元:"+temp/100+"张");
    temp=temp%100;
    System.out.println("五角:"+temp/50+"枚");
    temp=temp%50;
    System.out.println("二角:"+temp/20+"枚");
    temp=temp%20;
    System.out.println("一角:"+temp/10+"枚");
    //temp=temp%10;
    }
    }
      

  3.   

    lz你不是学java的吧?/语法错误一大堆,还有算法也有问题,4.75怎么算呀??
      

  4.   

    楼主的算法如果输入1.0,则输出
    请先收好2元零钱!
    应该是找零4.0,而不是2,所以得通过循环判断,我写了一个简化版,没能处理误差(只精确到毛).package other;public class Money {
    public static double money(double value) throws MyException {
    if (value <= 0 || value > 5.0) {
    throw new MyException();
    }
    value = 5 - value;
    for (; value > 0;) {
    if (value >= 2) {
    value -= 2;
    System.out.println(2);
    } else if (value >= 1) {
    System.out.println(1);
    value -= 1;
    } else if (value >= 0.5) {
    System.out.println(0.5);
    value -= 0.5;
    } else if (value >= 0.2) {
    System.out.println(0.2);
    value -= 0.2;
    } else(value >= 0.1) {
    value -= 0.1;
    System.out.println(0.1);
    }
    }
    return value;
    } public static void main(String[] args) {
    try {
    money(4.70);
    } catch (MyException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  5.   

    不好意思,上边的代码有点问题,最后一个else不需要条件...package other;public class Money {
    public static double money(double value) throws MyException {
    if (value <= 0 || value > 5.0) {
    throw new MyException();
    }
    value = 5 - value;
    for (; value > 0;) {
    if (value >= 2) {
    value -= 2;
    System.out.println(2);
    } else if (value >= 1) {
    System.out.println(1);
    value -= 1;
    } else if (value >= 0.5) {
    System.out.println(0.5);
    value -= 0.5;
    } else if (value >= 0.2) {
    System.out.println(0.2);
    value -= 0.2;
    } else{
    value -= 0.1;
    System.out.println(0.1);
    }
    }
    return value;
    } public static void main(String[] args) {
    try {
    money(4.75);
    } catch (MyException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }