在我的Java程序中,我有一个方法:
private void giveMoney(int money) {
int notes[] = {10, 20, 50, 100, 200, 500};
StringBuffer cash = new StringBuffer();
int i = notes.length - 1;
while (i >= 0)
if (notes[i] > money)
i--;
else {
cash.append(notes[i]).append(" ");
money -= notes[i];
}
System.out.print(cash);
}
例如,如果 钱== 990 输出将是:500 200 200 50 20 20
我想弄清楚如何使用以下笔记来计算如何分配现金:500,200,100,50,20,10。
答案 0 :(得分:2)
如果我的问题是正确的,那就是你想要的那条线:
int amount = (int) Math.floor(money/banknotes[i]);
整个功能:
private void giveCash(int money) {
int banknotes[] = {10, 20, 50, 100, 200, 500};
StringBuffer cash = new StringBuffer();
int i = banknotes.length - 1;
while (i >= 0) {
if (banknotes[i] > money) {
i--;
} else {
int amount = (int) Math.floor(money/banknotes[i]);
cash.append(banknotes[i]).append("x").append(amount).append(" ");
money -= banknotes[i]*amount;
}
}
TextView tvCash = (TextView) findViewById(R.id.cash);
tvCash.setText(cash);
}
输出:
500x1 200x2 50x1 20x2
答案 1 :(得分:1)
基本上得到每个音符进入调整总数的次数的int计数。即,您调整总数以删除已放弃较大音符的任何值 使用模数,你得到的余数不能被该音符整除,并将该值作为调整值传递,以测试该面额中可以分配多少音符。
我已经给你算法了。
500_amounts = (int) amount/500
500_Leftover = amount % 500
200_amounts = (imt) 500_Leftover/200
200_Leftover = 500_Leftover % 200
100_amount = (int) 200_Leftover/100
100_Leftover = 200_Leftover % 100
// and so on
请注意,这是伪代码,您无法像这样命名变量,也不会像这样运行。
我应该添加最佳实践,最好使用常量作为面额的值,并在另一个答案中建议,因为这里没有明确说明,循环使用它们会很好。