2014-02-10 82 views
-1

我是新來的C++。問題在於最小化所需的硬幣數量以給出確切的更改,我有25 10 5和1美分硬幣。要換多少個硬幣

例如,如果一個客戶欠下3.20美元,硬幣的數量應該是14個(25箇中的12個和10箇中的2個)。

我的問題: 像4.20一些說,你需要22枚金幣,而不是18,我知道,當它乘以100變化所產生的問題,我得到的419,而不是420

這裏是我的代碼。

int coins = change * 100; 
//How many 25 cent coins you need 
if (coins >= 25) 
{ 
    quarter = coins/25; 
    coins = coins % 25;   
} 

//How many 10 cent coins you need 
if (coins >= 10) 
{ 
    dimes = coins/10; 
    coins = coins % 10; 
} 

//How many 5 cent coins you need 
if (coins >= 5) 
{ 
    nickels = coins/5; 
    coins = coins % 5; 
} 
//How many 1 cent coins you need 
if (coins >= 1) 
{ 
    pennies = coins/1; 
    coins = coins % 1; 
} 

NumCoins = quarter + dimes + nickels + pennies; 

printf("%d \n", NumCoins); 

感謝您的幫助。

+0

被四捨五入或(不需要的)整數除法問題困住了嗎? –

+1

「變更」的類型是什麼?爲什麼你甚至在'C++'中使用'printf'? –

+0

@πάνταῥεῖ聽起來像一個四捨五入的問題,我只是在C#中用float作爲變量變量,我得到了419. –

回答

0

從我對這個問題的理解我對如何做到這一點的建議基本上有兩個變量。 change(這是你有美分的變化)以及coins(這是你需要改變的硬幣總數。)

然後,一旦你有變化,你繼續減去宿舍(這是25),從change變量,直到它小於25,然後你移動到硬幣,鎳幣和最後幾分錢。同時你減少change變量,你增加coins爲了跟蹤你需要的最小數量的硬幣。這應該比追蹤所有這些其他變量更清潔和簡單。

一些僞代碼看起來是這樣的:

declare variables 
do loop of change > 25 
    change = change - 25 
    coins = coins + 1 
do loop of change > 10 
    ... 
(keep doing this for dimes, nickels and pennies) 
    ... 
display number of coins needed. 
+0

如果需要輸出確切硬幣的數量,則有多個變量會很有幫助,無論哪種方式,此答案都非常有用。然而,我們仍然需要向OP解釋爲什麼他在將變化乘以100而不是420(看起來舍入的問題)乘以419時。 –

+0

@JohnOdom,謝謝。從閱讀他的問題以來,這只是一個簡單的建議,似乎並不需要。 – Annabelle

+0

@Link真的嗎?僞代碼,而OP的要求一些具體的[tag:C++]代碼? –

4
#include<iostream> 
using namespace std; 

int main() 
{ 
    int amount = 420; 
    int coins[] = { 25, 10, 5, 1 }; 

    int ncoins = 0; 
    for(int i=0 ; i<sizeof(coins)/sizeof(int) ; ++i) 
    { 
    ncoins += amount/coins[i]; 
    amount %= coins[i]; 
    } 
    cout << "You need " << ncoins << " coin(s)." << endl; 
} 

需要18硬幣(S)。

很容易追蹤for循環中需要哪些特定硬幣。我假設讀者可以根據需要調整代碼以適合他們的目的。

+0

+1不公開**代碼中的所有**最終解決方案! –