我最近开始尝试解决一些UVA问题,但遇到了第一个问题。问题是3n +1。我已经取得了一些进展,并且几乎完成了除增量之外的所有要求。

InputStreamReader inputStream = new InputStreamReader(System.in);
BufferedReader buffReader = new BufferedReader(inputStream);

try
{
    String input = buffReader.readLine();
    String[] brokenArray = input.split("\\s");
    int a = Integer.parseInt(brokenArray[0]);
    int b = Integer.parseInt(brokenArray[1]);
    int c = 1;
    System.out.print(a +" "+b+" ");

    //if( a <= b )

    while ( a!= b) {
        while (a != 1) {
            if((a%2)!= 0) {
                c++;
                a = 3*a+1;
            } else {
                c++;
                a = a/2;
            }
        }
        System.out.println(c);
        **a ++;**
    }


所以基本上它应该接受2个输入并运行一个计数,该计数是所执行操作的c ..但是在完成对一个数字的操作计数之前,必须先移至第二个数字,所以我将一个增量移动继续下一个。它第一次增加,但底部的变量a保持为1,因此会不断增加1,而不是增加2、3等。

最佳答案

您的内部循环将始终确保a == 1结束(因为它在a != 1时循环,因此仅在a == 1时结束)。然后,您的外循环在重复之前增加a。这就是为什么您总是增加1的原因。因此,除非b == 2,否则您总是会陷入困境。

10-08 13:45
查看更多