我最近开始尝试解决一些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
,否则您总是会陷入困境。