java - 冰雹 : loop for #1-#200

标签 java

冰雹问题涉及取x,如果它是偶数,则将其除以二。如果是奇数,则乘以 3 再加 1。继续下去,您将得到重复的 4, 2, 1, 4, 2, 1... 我在创建循环并让它将解决方案打印到输入 #1-#200 时遇到问题。

我尝试在 for 循环内添加一个 for 循环、while 循环和一个 while 循环。我无法弄清楚如何在运行一次方程后使变量增加。

我弄清楚了如何使用输入来编写代码。但在这里我尝试放入一个 for 循环,但它打印“1”,就是这样。

for (int i = 200; i <= 200; i--) {
    System.out.print(i + ", ");

    while (i > 4) {
        if (i % 2 == 0) {
            int i1 = i / 2;
            System.out.print(i1 + ", ");
            i = i1;
        }
        else {
            int i1 = i * 3 + 1;
            System.out.print(i1 + ", ");
            i = i1;
        }
    }

    System.out.println(" ");
}

最佳答案

您正在覆盖循环计数器。因此,在完成 x=200 的冰雹问题后,您不会在 x=199 时启动它,而是在 x=3 时启动它。

其次,您不是尝试 1 到 200 之间的值,而是尝试所有小于或等于 200 的值。这也包括负数。因此你的程序以无限循环结束。

我的解决方案是引入一个额外的整数 j,在 for 循环开始时使用 i 的值进行初始化,并继续对该整数 j 进行减法等操作。 为了使外部 for 循环有限,我将条件切换为 i > 0。这样,在完成 x=1 的冰雹问题后,循环将停止。

for (int i = 200; i > 0; i--) {
        int j = i
         System.out.print(i + ", ");

         while (j > 4) {

            if (j % 2 == 0) {
               int i1 = j / 2;
               System.out.print(i1 + ", ");
               j = i1;

            }
            else {
               int i1 = j * 3 + 1;
               System.out.print(i1 + ", ");
               j = i1;
            }
         }
         System.out.println(" ");

      }

关于java - 冰雹 : loop for #1-#200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58031833/

相关文章:

java - 设置plane_mode_on已从android.provider.Settings.System移至android.provider.Settings.Global,返回只读值

java - 空格不匹配

java - Hashmap<key, value> 具有相同的输入并实现了 equals 和 hashcode 方法,但我没有收到重复键的错误?

java - 如何在jpanel上使用等待(长时间超时)

java - 如何在 Android Studio 中的同一个 ArrayAdaptor 中查看 2 个 Firebase 查询的结果

java - 如何使用 JPA 从 1 自动生成 id?

java - 索引无法正确读取

java - 如何在Java中从字符串中提取多个整数?

java - 节点间距离不规则的 A* 算法启发式

当方程不可因式分解时,Java 仅返回 0