2012-10-13 27 views
-2

在大学给了下面的练习,但无法让我的头在最后一点。你如何将答案压缩到音符。如果有什么答案不能被50等被devided ... 我已经试过模& Math类....打破一个数字到钞票

卡什曼先生,当地街角小店的店主正在跟 麻烦了员工给出了错误的变化。为了解决这个问题,他委托 创建一个程序,允许工作人员输入购物的总成本和客户支付的金额。然后程序应该计算并输出多少欧元50欧元,20欧元,10欧元,5欧元,5欧元,10欧元和1欧元的硬币,以便为客户提供改变。 Cashman先生拒绝处理小硬币,因此尽管工作人员 成员为购物成本输入十进制值,他将其所有价格降至最接近的欧元,并且不打扰 50c,20c,10c ,5c,2c或1c硬币。

编写,编译和测试应用程序按Cashmans先生 要求和类保存为MakingChange.java

+1

模数和数学绝对是走的路 – Pleun

+0

卡什曼先生似乎是一个坏商人。 –

+0

我只是在我的第四周,放松一下。这是数学部分,让我感到困惑。这不是家庭作业,而是一个我想要理解的额外练习。 @VincenzoSanchez有些可怕的态度.. – user1743358

回答

1

您有模正确的方法,但需要整数除法为好。我们来看一下价值164欧元。

如果您将164除以50(使用整数除法),您会得到3.因此,需要3欧元50笔记。

如果您制定了164 50,您最终得到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 
+0

感谢您的帮助,我会试试这个! – user1743358

+0

感谢您的帮助,我会试试这个!我们被告知需要花费很长时间(并未学习'code'def workOutNotes(numEuros):'代码') – user1743358

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; 
} 

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