编程语言
首页 > 编程语言> > c# – 硬币改变,就是说不对

c# – 硬币改变,就是说不对

作者:互联网

你好,我正在尝试创建一个algorythm,找出我可以改变回来的方式.
但我只是不能正确实现,我一直得到4我应该得到6,我只是不明白为什么.

这是我在C#中的实现,它是从http://www.algorithmist.com/index.php/Coin_Change的伪代码创建的

     private static int[] S = { 1, 2, 5 };
        private static void Main(string[] args)
        {
            int amount = 7;
            int ways = count2(amount, S.Length);
            Console.WriteLine("Ways to make change for " + amount + " kr: " + ways.ToString());
            Console.ReadLine();
        }    
static int count2(int n, int m)
        {
        int[,] table = new int[n,m];

        for (int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                // Rules
                // 1: table[0,0] or table[0,x] = 1
                // 2: talbe[i <= -1, x] = 0
                // 3: table[x, j <= -1] = 0

                int total = 0;

                // first sub-problem
                // count(n, m-1)
                if (i == 0) // rule 1
                    total += 1;
                else if (i <= -1) // rule 2
                    total += 0;
                else if (j - 1 <= -1)
                    total += 0;
                else
                    total += table[i, j-1];

                // second sub-problem
                // count(n-S[m], m)
                if (j - 1 <= -1) // rule 3
                    total += 0;
                else if (i - S[j - 1] == 0) // rule 1
                    total += 1;
                else if (i - S[j - 1] <= -1) // rule 2
                    total += 0;
                else
                    total += table[i - S[j-1], j];

                table[i, j] = total;
            }
        }
        return table[n-1, m-1];
    }

解决方法:

这是运行顺序的算法.按绿色“播放”箭头运行它.
http://www.exorithm.com/algorithm/view/make_change

我认为主要问题是算法循环应该从-1开始.我认为递归写得更清晰,但这是一个有趣的练习.

标签:c,algorithm,coin-change
来源: https://codeday.me/bug/20190717/1483887.html