2

1セントから99セントまでの変化に対してどのコインを配るかを指示するJavaプログラムを作成する必要があります。たとえば、金額が86セントの場合、出力は次のようになります。

86セントは、4分の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の代わりにdoubleを使用することも想定していません。

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) );
}
4

3 に答える 3

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であるという事実にあるため、合計値が を超えない、指定された値 ( ) のコインの「最大」数が保持されます。valcoinValueamount

于 2012-06-21T17:24:10.543 に答える
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++
}

編集:どの宗派も、実際には少し野心的です。毎回変更できることを保証できる最小額面を持っている場合にのみ当てはまります。

于 2012-06-21T22:11:12.177 に答える
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;
    }
}
于 2012-06-21T17:23:05.183 に答える