Привет, я пытаюсь создать алгоритм, который узнает, как много способов получить обратно. Но я просто не могу получить правку, я продолжаю получать 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];
}
Извините, что это было 0..n и 0..m – Androme