2017-10-15 5 views
-1

何人かの理由で私の貪欲なコインの変更プログラムが動作しません。関数は最小値のコインで値を変更することができます。コインが含まれている配列もあります。私のプログラムには何も表示されません。理由はわかりません。貪欲アルゴリズムによるコインの変更

public class Main { 

public static int coinChangeGreedy(int[] coins, int n) { 

     int result = 0; 

     while (n != 0) 
     { 

      for (int i=coins.length - 1 ; i>=0 ; i--) 
      { 
       if (coins[i] <= n) 
       { 
        n = n - coins[i]; 
        result++; 
       } 
      } 
     } 
     return result; 
    } 

    public static void main(String[] args) 
    { 
     int[] coins = {1, 2, 5}; 
     int n = 11; 

     coinChangeGreedy(coins, n); 

    } 

} 
+1

貪欲アルゴリズムはこの問題には適していません。代わりに「動的プログラミング」を使用する必要があります –

+0

何も印刷していないので何も表示されません... –

+0

* - あなたもそのトラックを維持していない –

答えて

0

まず、何も印刷していません。機能を実行するだけです。
2番目 - あなたのコードに少しの欠陥があります。あなたが見る - あなたが働いているコインを見つけたら、次のコインに行くべきではありませんが、それがもう一度 "合う"かどうかを見てください。
n=11の例では、あなたは最初のものとして5を持っていて、次に2に移動します。しかし、実際には5をもう一度試してください(forループが次の要素に行くのを防ぐ)。例を参照してください:

public static int coinChangeGreedy(int[] coins, int n) { 

     int result = 0; 

     while (n != 0) { 

      for (int i=coins.length - 1 ; i>=0 ; i--) { 
       if (coins[i] <= n) { 
        n = n - coins[i]; 
        System.out.println("Adding " +coins[i]); 
        i++; //neutralizing i-- with i++. 

        result++; 
       } 
      } 
     } 
     return result; 
    } 

あなたは5回取られていることがわかりますされていません。
P.s. - あなたがコイン配列が昇ると仮定している場合。 は、そして、それを印刷するには、あなただけに行く:

System.out.println("Total coins needed: " +coinChangeGreedy(coins, n)); 

また - あなたが使用するコインを追跡したい場合、あなたはArrayListでそれが選択されるたびにそれらを格納することができます。 list.add(coins [i]). And of course you declare and initialize that list`が目を惹く。

+0

ありがとうございました!今それは動作します! –

関連する問題