我是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 :(得分: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枚硬币。
很容易跟踪for循环中需要哪些特定硬币。我假设读者可以根据需要调整代码。
答案 1 :(得分: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.