硬币改变与贪婪算法

时间:2017-10-15 14:16:53

标签: java greedy

Hy家伙,由于某种原因,我的贪婪硬币改变程序不起作用。该函数应返回最小金额,您可以更改一个值,并且还有一个数组,其中包括您可以使用的硬币。我的程序没有显示任何我不知道的原因。

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)

嗯,首先 - 你没有打印任何东西 - 你只需运行该功能。
第二 - 你的代码中有一点缺陷。你看 - 如果你找到一个有效的硬币,你不应该去下一个硬币,但看看那个硬币是否适合&#34;再次。
在您的for示例中。你有5作为第一个然后移动到2.但你应该再次尝试5(防止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; } 循环转到下一个元素)。见例子:

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

不是你会看到5被带走两次。
附: - 如果你假设硬币阵列将升序。 要打印出来,你就去了:

ArrayList

此外 - 如果您想跟踪所使用的硬币,您可以在每次选择时将它们存储在. And of course you declare and initialize that中。 list.add(coins [i])foreach ($post->getLikes as $like) { //$like will contain a model that likes the post } 在开始时列出。