到达具有不同整数的数字(Java)

时间:2015-02-22 20:40:51

标签: java algorithm

这是一个问题:考虑一种货币体系,其中有七种面额的票据,即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);
    }
}

3 个答案:

答案 0 :(得分:2)

您的所有条件都会检查付费a, b, ...是否会留下严格正数(>= 1)的数量。所以你永远不会支付最后需要的账单,而且你的金额永远不会达到n,因此无限循环。

例如,如果您可以通过支付05,那么您应该这样做。

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