-2

在大学里进行了以下练习,但我无法理解最后一点。您如何将答案分解为音符。如果答案不能被 50 等除怎么办……我试过模数和数学课……

当地街角商店的老板卡什曼先生遇到了麻烦,因为他的员工给了错误的零钱。为了解决这个问题,他委托您创建一个程序,允许工作人员输入购物的总成本和客户支付的金额。然后程序应计算并输出有多少 50 欧元、20 欧元、10 欧元、5 欧元纸币,以及有多少 2 欧元和 1 欧元硬币作为找零给客户。Cashman 先生拒绝处理小硬币,因此尽管工作人员输入了购物成本的十进制值,但他将所有价格四舍五入到最接近的欧元,并且不理会 50c、20c、10c、5c、2c或 1c 硬币。

按照 Mr Cashmans 的要求编写、编译和测试应用程序,并将类保存为 MakingChange.java

4

2 回答 2

1

你有正确的模数方法,但也需要整数除法。让我们检查一下价值 164 欧元。

如果将 164 除以 50(使用整数除法),则得到 3。因此需要 3 张 50 欧元的钞票。

如果你计算出 16450,你最终得到 14,这是你取出这三张 50 欧元钞票后剩下的值。这是您下一次迭代的起点,带有 20 欧元的钞票。

然后你就一直这样做,直到你用尽了所有的货币类型。

换句话说,伪代码可能类似于:

def workOutNotes (numEuros):
    left = numEuros
    //                               for 164:      numXXs   left
    num50s = int (left / 50); left = left % 50; //      3     14
    num20s = int (left / 20); left = left % 20; //      0     14
    num10s = int (left / 10); left = left % 10; //      1      4
    num5s  = int (left /  5); left = left %  5; //      0      4
    num2s  = int (left /  2); left = left %  2; //      2      0
    num1s  = left;                              //      0
于 2012-10-13T12:39:56.890 回答
0

我为您准备了一段 C# 代码,它基本上将更改分解为越来越小的账单:

int changeAmount = 1300;
var bills = new int[] { 200, 100, 50, 20, 10, 5 };

var changeBills = new Dictionary<int, int>();
foreach(int bill in bills)
{
    changeBills.Add(bill, changeAmount / bill);
    changeAmount = changeAmount % bill;
}

该代码削减了更改以适应账单,而不是购物量。但我认为让你添加这个逻辑是公平的。

于 2012-10-13T12:48:19.243 回答