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