import java.util.Scanner; public class Moni { public static void main(String[] args){ System.out.println("请输入一个不超过1000的正整数:"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int count = 0; while(n != 1){ if(n % 2 == 0){ n = n / 2; }else { n = (3 * n + 1) / 2; count++; } } while(n == 1) { System.out.println("0步即可"); } System.out.println(count); } }
时间: 2024-02-14 16:11:44 浏览: 74
这段代码的逻辑与前面的代码有些不同,当 n 为偶数时,执行 n = n / 2; 语句,当 n 为奇数时,执行 n = (3 * n + 1) / 2; 语句,并且在 n 为奇数时,count++ 语句被放在了 else 分支的里面。然后在 while 循环结束后,判断 n 是否等于 1,如果等于 1,则输出 "0步即可";否则输出 count 的值。
这段代码的问题在于,当 n 为偶数时,虽然没有执行 count++ 语句,但是它的值也应该被计入步数,因此需要将 count++ 语句放到 while 循环的外面,并在每次循环中都执行。修改后的代码如下:
```
import java.util.Scanner;
public class Moni {
public static void main(String[] args){
System.out.println("请输入一个不超过1000的正整数:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
while(n != 1){
if(n % 2 == 0){
n = n / 2;
}else {
n = (3 * n + 1) / 2;
}
count++;
}
if(n == 1) {
System.out.println("0步即可");
} else {
System.out.println(count);
}
}
}
```
阅读全文