2012-01-25 24 views
2

私は、特定の金額でコインの組み合わせと各コインの量を正しく見つけるプログラムをPythonで書くように求められました。この問題では、ニッケルとダイムだけが使用されます。Pythonでコインの組み合わせを決定する

例 - 10個のコインがあると仮定すると、何個のニッケルとダイムが$ 0.85に入っていますか?

これは私はそれを解決する方法である:

方程式設定
  1. Dを+ N = 10
    .10d + .05n = 0.85

  2. はnについて解きます:
    n = 10-d

  3. 解決:
    .10d + 0.05(10-D)= 0.85
    .05d + 0.5 -.05d = 0.85
    .05d = 0.35
    D = 7
    N = 3

これはどうやってプログラミングするのですか?

申し訳ありませんが、これはばかげた質問ですが、私はかなりpythonに新しいと私は完全にこの1つを失っています。

+1

'some'コードを提供する必要があります。お試しでもっと学びます。たぶん良いPythonチュートリアル(Googleダイブ・イン・パイソン)が役に立ちます。 – ChristopheD

+0

プログラミング経験はありますか? (任意の言語) –

+0

* .05d + .5 -.05d = .85 *いいえ、どんなdでも、常に0.5になります。 ;) – Gandaro

答えて

2

スタイルのポイントはありませんが、すべての可能性を簡単に検索すると、実用的な目的ですばやく簡単に作成できます。すべてのニッケルから始まり、ダイムがない場合は、ダイムに1を加え続け、答えを得るまで(またはしないで)ニッケルから1つを取り除きます。

def solve(ncoins, cents): 
    nickels = ncoins 
    dimes = 0 
    for ii in range(ncoins): 
     if (nickels * 5) + (dimes * 10) == cents: 
      return "{nickels} nickels, {dimes} dimes".format(
       nickels=nickels, dimes=dimes) 
     nickels -= 1 
     dimes += 1 
    raise AssertionError("{ncoins} coins can't be {cents} cents!".format(
     ncoins=ncoins, cents=cents)) 

print solve(10, 85) 
print solve(10, 75) 
print solve(100, 75) 

出力:

3 nickels, 7 dimes 
5 nickels, 5 dimes 
Traceback (most recent call last): 
    File "/home/akg/tmp/sacoins.py", line 16, in <module> 
    print solve(100, 75) 
    File "/home/akg/tmp/sacoins.py", line 10, in solve 
    raise AssertionError("{ncoins} coins can't be {cents} cents!".format(ncoins=ncoins, cents=cents)) 
AssertionError: 100 coins can't be 75 cents! 
+0

これを行うには 'filter'を使用できました。たとえば、 'filter(lambda x:x [0] * 5 + x [1] * 10 == 85、enumerate(range(11)[:: - 1]))'です。 – Gandaro

5

は、コインの数がa、そうd + n = aとします。

合計をbとすると、0.1d + 0.05n = bとなります。

その後

ので
n = a - d 
0.1d+0.05(a-d)=b 
0.05d = b-0.05a 
d = 20b - a 
n = a - d = a - 20b +a = 2a - 20b 

abを与えられた:

d = 20b - a 
n = a - d 

は、今、私たちはただ、Pythonでこれら2式をプログラムする必要があります。公式ドキュメントの例で

ルック:http://docs.python.org/tutorial/controlflow.html#defining-functions

def count(num, total_sum): 
    d = 20*total_sum - num 
    n = num - d 
    return (n,d) 

print count(10, 0.85) 
+0

ベストソリューション! :) – Gandaro

+0

ループ構造ではなく、解を迅速な計算に減らすための代数の使用について+1。 – Makoto

1

あなたが唯一のダイムと硬貨を持っている場合は、次の操作を行うだけですることができますダイムあたり2枚の硬貨があるので

>>> total_coins = 10 
>>> nickels = 85/5 # 85 is the total amount in cents; 5 is the value of a nickel 
>>> nickels 
17 
>>> dimes = 0 
>>> while dimes + nickels != total_coins: 
... dimes += 1 
... nickels -= 2 
... 
>>> dimes 
7 
>>> nickels 
3 
>>> 

をあなたはコインの数が足りなくなるまで、そこに何枚のニッケがあるか把握し、2枚のニッケルスごとに1枚を追加することができます。

あなたが(入力として与えられ、合計とnumcoins)を使用することができ
+0

OPがこれを読んでいる場合は、「D K」の答えを半ダース回入力するか、foriegn言語のように見えなくなるまでタイプします。 – Droogans

0

かではなく、コインの可能コンボを反復処理、:

justnickels = total/.05 
numdimes = justnickels - numcoins 
numnickels = numcoins - numdimes 

あなたは答えの一つは、特定のコンボとして負の数を取得する場合(のような5つのコインで構成された85)は解決できません。

関連する問題