2012-01-25 129 views
2

我被要求用python編寫一個程序,該程序能夠正確地找到硬幣的組合,以及每個硬幣的數量。在這個問題中只使用了鎳和硬幣。確定python中的硬幣組合

Ex - 考慮到有10個硬幣,在$ .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

您需要提供'some'代碼。您將通過嘗試瞭解更多。也許一個好的Python教程(谷歌潛入Python)可以提供幫助。 – ChristopheD

+0

你有任何編程經驗嗎? (任何語言) –

+0

* .05d + .5 -.05d = .85 * nope,無論d是什麼,它總是0.5。 ;) – Gandaro

回答

2

對於風格沒有要點,但是對於所有可能性的簡單搜索很快就可以寫出來,並且足夠快以用於實際目的。從所有的鎳幣開始,不用硬幣,然後繼續添加一個硬幣並從鎳幣中取出一個,直到你得到答案(或不)。

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這兩個公式進行編程。

看看官方文檔的例子: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

如果你只有一角硬幣和鎳幣,你可以做到以下幾點:

>>> 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點五分,你可以計算出有多少鎳幣,併爲每兩個鎳幣加一個硬幣,直到你擁有合適數量的硬幣。

+0

如果OP正在閱讀此內容,請輸入'D K'的答案六次,或直到停止看起來像一個foriegn語言。 – Droogans

0

或者,而不是通過硬幣可能連擊迭代,你可以使用(給定的總和numcoins輸入):

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

如果你得到負數的答案,那麼具體的組合之一(如.85由5個硬幣組成)無法解決。