这是一个问题:考虑一种货币体系,其中有七种面额的票据,即1卢比,2卢比,卢比。 5,卢比。 10,卢比。 50,卢比。 100.如果是一笔卢比。通过键盘输入N,编写一个程序来计算最小数量的音符,它们将组合起来给出Rs。 Ñ
这是我的代码。该程序似乎陷入无限循环
public class ReachNwithCurrencyNotes {
public static void main(String[] args) {
int n,temp = 0, a = 1, b = 2, c = 5, d = 10, e = 50, f = 100, sum = 0, countA = 0, countB = 0, countC = 0, countD = 0, countE = 0, countF = 0;
Scanner input = new Scanner (System.in);
System.out.println("Please enter N");
n = input.nextInt();
temp = n;
do {
if (temp-f>=100) {
sum = sum + f;
countF++;
temp = temp - f;
}
else if (temp-e>=50) {
sum = sum + e;
countE++;
temp = temp - e;
}
else if (temp-d>=10) {
sum = sum + d;
countD++;
temp = temp - d;
}
else if (temp-c>=5){
sum = sum + c;
countC++;
temp = temp - c;
}
else if (temp-b>=2){
sum = sum + b;
countB++;
temp = temp - b;
}
else if (temp-a>=1){
sum = sum + a;
countA++;
temp = temp - a;
}
} while (sum<n);
System.out.println("N completed with\n" + countA + "\n" + countB + "\n" + countC + "\n" + countD + "\n" + countE + "\n" + countF);
}
}
答案 0 :(得分:2)
您的所有条件都会检查付费a, b, ...
是否会留下严格正数(>= 1
)的数量。所以你永远不会支付最后需要的账单,而且你的金额永远不会达到n
,因此无限循环。
例如,如果您可以通过支付0
来5
,那么您应该这样做。
答案 1 :(得分:0)
假设数字为1,则temp-a等于0,因此不会发生任何事情,程序将永远循环。
所有条件如(temp-b> = 2)看起来都不对,请尝试用以下内容替换它们:
(temp-b>=0)
或只是
(temp>=b)
答案 2 :(得分:0)
为了扩展我的评论,这里有一个例子:
您从最高值开始,然后降到最低值。
//input: integer value 'in'
int rest = in % 100;
int n100 = in / 100;
int n50 = rest / 50;
rest %= 50;
int n10 = rest / 10;
rest %= 10;
int n2 = rest / 2;
rest %= 2;
int n1 = rest % 2;
如果输入273:
1: rest = 273 % 100 = 73
2: n100 = 273 / 100 = 2
3: n50 = 73 / 50 = 1
4: rest = 73 % 50 = 23
5: n10 = 23 / 10 = 2
6: rest = 23 % 10 = 3
7: n2 = 3 / 2 = 1
8: rest = 3 % 2 = 1
9: n1 = 1