2011-03-14 111 views
0

只是想仔細檢查一下這段代碼不會有任何錯誤,主要是與模糊運算符有關,我不確定。硬幣更改算法

的問題是:

問題:寫一個ACL算法,考慮物品的成本(小於或等於一美元),給出了50%,20美分,10美分,5的數量如果他們交了一美元,買方將收到1美分和1美分的硬幣。您必須儘量減少更改中的硬幣數量。

我的解決辦法是:

Algorithm coin_change 
{ 
    int cost, change, fifty, twenty, ten, five, one; 
    read(cost); 
    change = 100 - cost; 

    fifty = change/50; 
    change = change % 50; 

    twenty = change/20; 
    change = change % 20; 

    ten = change/10; 
    change = change % 10; 

    five = change/5; 
    change = change % 5; 

    one = change; 

    print(fifty, twenty, ten, five, one); 
} 

我不確定主要的是例如,如果變化是93美分,這將改變到43美分,然後下降到3美分。現在問題是「change = change % 10」變化時是3美分還是等於3還是變成了?希望這是有道理的。

在此先感謝。

+0

@Bill,不知道我同意這裏封閉,但你有可怕的藍鑽,這意味着所有我能做的就是解釋爲什麼:-)雖然代碼是相似的,這個問題是特別爲約模的一個效果(最初的問題有一個天真的'while'解決方案,根本不使用modulo)。 – paxdiablo

+0

@paxdiablo:夠公平的。我看到他的解決方案並不是來自原問題的答案,所以它是不同的。 –

回答

2

3模10會給你3,顧名思義。當您除以給定的數字時,剩下的就是剩下的部分。

當你用3除以10時,得到0,餘數爲3.所以你的算法在這個意義上是正確的。

通常,計算機語言中唯一需要擔心的模數是處理負數 - 某些語言的行爲有所不同。

但是你不會嘲笑負數,所以不要擔心這一點。

1

是的。

change = change % 10 

這仍然會返回3,無論是否改變最初是43或3