値 N が与えられ、N セントを両替したい場合、S = { S1, S2, .. , Sm} 価値のコインのそれぞれが無限にある場合、両替する方法はいくつありますか? コインの順番は問いません。
以下のコードを書きましたが、常に実際の回答よりも 1 つ少ない数を返します。これがソリューションをコーディングする正しい方法であるかどうか知りたいですか?
#include <stdio.h>
int ways=0;
int remember[100] = {0};
void foo(int coin_denomination[], int size, int sum)
{
int i;
printf("%d\n", sum);
if (sum==0) {
ways++;
return;
}
if (remember[sum]==1)
return;
remember[sum] = 1;
if (sum < 0)
return;
for(i=0;i<size;i++)
foo(coin_denomination, size, sum-coin_denomination[i]);
}
int main()
{
int coin_denomination[] = {1, 2, 3};
int sum = 5;
foo(coin_denomination, sizeof(coin_denomination)/sizeof(coin_denomination[0]), sum);
printf("%d\n", ways);
return 0;
}