给改变多少钱币

时间:2014-02-10 21:28:55

标签: c++

我是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);

感谢您的帮助。

2 个答案:

答案 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.