一般的に8つの硬貨があります。
1p、2p、5p、10p、20p、50p、$ 1(100p)、$ 2(200p)です。
次のように$ 2にすることができる: 1X $ 1 + 1x50p + 2x20p + 1x5p + 1x2p + 3x1p
コインの任意の番号を使用して$ 3行うことができますどのように多くの異なる方法?
PHPを使用してどのようにすることができますか?
一般的に8つの硬貨があります。
1p、2p、5p、10p、20p、50p、$ 1(100p)、$ 2(200p)です。
次のように$ 2にすることができる: 1X $ 1 + 1x50p + 2x20p + 1x5p + 1x2p + 3x1p
コインの任意の番号を使用して$ 3行うことができますどのように多くの異なる方法?
PHPを使用してどのようにすることができますか?
この問題とそのような問題は、generating functionsを使用して解決するのが最も効果的です。
は、このような場合のために、フォームk
は値1p, 2p, 5p, 10p, 20p, 50p, 100p, 200p
の一つである
1/(1 - x^k) = 1 + x^k + x^(2k) + x^(3k) + ...
の条件を検討したいです。今
f(x) = 1/[ (1-x) * (1-x^2) * (1-x^5) * ... * (1-x^200) ]
が続い
x^m
の係数を正確に特定宗派から作ることができる
mp
いくつかの方法で取得するために一緒にこれらの8項の全てを掛けます。例えば、
x^200
の係数は
6
であり、これは正確に
6
の与えられた金種から得ることができるという事実に対応する。
ここでは、これがなぜ機能するのかについて、すばやく説明します。指数の合計が今、すなわち
i1*k1 + i2*k2 + ... + i8*k8 = m
m
なるようにf(x)
でx^m
の係数は、分母形態(1 - x^k)
の各線形係数からフォームの用語を取るために、いくつかの方法でありますk1 = 1
の語は1p
と一致し、k2 = 2
の語は2p
の語に相当し、k3=5p
の語は5p
という語に相当する。上記の合計は
i1*(1p) + i2*(2p) + i3*(5p) + ... + i8*(200p) = m
となり、各金種の金額を示します。
これは明らかにパズルの問題であり、プログラミングに関する質問ではありません。 *アルゴリズムの実装に支障がある場合は、こちらにお尋ねください。あなたがペンや紙で答えることができるパズルの質問をするだけであれば、これは間違ったサイトです。 – deceze
宿題タグがありませんか? –
@DavidChan:非常に似ていますが(わずかに変更された)Project Eulerの問題31. –