プロジェクトオイラー31で間違った結果

私はプロジェクト・ユーラー31 を解決しようとしました:

イングランドでは、通貨はポンド、ポンド、ペンス、p、   一般的な循環には8つのコインがあります:

     1p、2p、5p、10p、20p、50p、1p(100p)、および2p(200p)である。可能です   £2を次のようにしてください:

     1×1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1pここで、      

£2の方法はいくつありますか   任意の数のコインを使って作ったのですか?

このコードで:

#define to2(x) ((x)/2+1)

int to5(x)
{
    int acc=1;
    for(;x>0;x-=5)
        acc+=to2(x);
    return acc;
}

int to10(x)
{
    int acc=1;
    for(;x>0;x-=10)
        acc+=to5(x);
    return acc;
}

int to20(x)
{
    int acc=1;
    for(;x>0;x-=20)
        acc+=to10(x);
    return acc;
}

int to50(x)
{
    int acc=1;
    for(;x>0;x-=50)
        acc+=to20(x);
    return acc;
}

int to100(x)
{
    int acc=1;
    for(;x>0;x-=100)
        acc+=to50(x);
    return acc;
}

int main()
{
    int test = to100(200)+1;
    printf("%d",test);
    return 0;
}

しかしコードは73685ではなく73685を与えますが、私はなぜ誰かが私を助けてくれるのか分かりませんplz?

1
そして、それは何を計算すべきですか?問題は他のサイトからの課題を見ただけではなく、それ自身で理解する必要があります。
追加された 著者 jpalecek,
もし適切であれば皆がプロジェクトオイラー31を知っているわけではありません。あなたは何を解決しようとしていますか?
追加された 著者 Bart,

2 答え

Why do you initialize acc to 1? (It makes sense when x is a multiple of the number of the function, but only then.) change it to 0, and change the loop condition to x>=0. (If I understood your code).

6
追加された
@chubakueno必ず回答を受け付けたものとしてマークしてください
追加された 著者 Scott Chamberlain,
どうもありがとうございました。
追加された 著者 chubakueno,

This problem does not need C code to solve, it is a problem of set selections. You need to solve number of ways to select n coins where n > 0 and sum = 2£, you should look up Set theory.
This should help you find a linear equation to compute the number.

1
追加された
Set理論よりも優れているのは、列挙型結合子関数の生成
追加された 著者 ypercubeᵀᴹ,