Java程序,可以告诉您从1美分到99美分的任何变化金额

时间:2012-06-21 17:14:05

标签: java methods

我必须编写一个Java程序,告诉我们在1美分到99美分之间的任何变化金额。例如,如果金额为86美分,则输出将如下所示:

  

86美分可以分为3个季度,1美分和1美分。

使用25,10,5和1的硬币面额。您的程序将使用以下方法(其中包括):

public static int computeCoin(int coinValue,);
// Precondition: 0 < coinValue < 100; 
// Postcondition: returned value has been set equal to the maximum 
//number of coins of the denomination coinValue cents that can be 
//obtained from amount (a different variable) cents. amount has been 
//decreased by the value of the coins, that is, decreased by     
//returnedValue*coinValue.

到目前为止,这就是我所拥有的,但我想我更想念的是有人可以帮助我吗? 我也不认为使用双打而不是int。

public class Assignment6{
   public static void main(String [] args){
   amount = (int)(Double.parseDouble(args[0])*100);

   System.out.println("Five: " + computeCoin(500));
   System.out.println("one: " + computeCoin(100) );
   System.out.println("Q : " + computeCoin(25) );
   System.out.println("D : " + computeCoin(10) );
   System.out.println("N : " + computeCoin(5) );
   System.out.println("P : " + computeCoin(1) );
}

3 个答案:

答案 0 :(得分:4)

public class Assignment6 {
    private static int amount = 0;
    public static void main(String[] args) {
        amount = (int)(Double.parseDouble(args[0])*100);
        System.out.println("Five: " + computeCoin(500));
        System.out.println("one: " + computeCoin(100) );
        System.out.println("Q : " + computeCoin(25) );
        System.out.println("D : " + computeCoin(10) );
        System.out.println("N : " + computeCoin(5) );
        System.out.println("P : " + computeCoin(1) );
    }

    public static int computeCoin(int cointValue) {
        int val = amount / cointValue;
        amount -= val * cointValue;
        return val;
    }
}

这里的诀窍在于computeCoin方法,而且除法是整数除法,因此val将保持'最大'数量的硬币总值不超过coinValue的给定值(amount)。

答案 1 :(得分:0)

像这样?

public class Assignment6 {
    public static int amount;
    public static int amountPreserv;

    public static void main(String[] args) {
        amount = (int) (Double.parseDouble(args[0]) * 100);
                amountPreserv = amount;

        System.out.println("Five: " + computeCoin(500));
        System.out.println("one: " + computeCoin(100));
        System.out.println("Q : " + computeCoin(25));
        System.out.println("D : " + computeCoin(10));
        System.out.println("N : " + computeCoin(5));
        System.out.println("P : " + computeCoin(1));
        System.out.println("Value inputed : " + amountPreserv);
    }

    private static int computeCoin(int i) {
        int cont = 0;
        while (amount > i) {
            amount -= i;
            cont++;
        }
        return cont;
    }
}

答案 2 :(得分:0)

最重要的一点是,改变是一种贪婪算法,这意味着在任何给定时间使你最接近目标的选项是最有效的选择。因此,对于任何金额和任何面额,最有效的算法应该是这样的:

int total;
int[] denom = { w, x, y, z };
int[] count = new int[denom.length]
int i = 0;
while (i < denom.length && total > 0) {
  while ( total >= denom[i] )
  {
    total -= denom[i];
    count[i]++;
  }
  i++
}
编辑:任何面额实际上都有点野心。只有你有一个最小面额才能保证每次都能做出改变,这是唯一的。