当前位置: 首页 > 知识库问答 >
问题:

在Java中查找Collatz序列中的最长链,循环不终止

裴硕
2023-03-14

我想应用Collatz序列并将其应用于从1到10^6的所有数字,返回达到1所需的链最大的数字。然而,我有一个问题,我的循环似乎没有在Eclipse中终止,我不知道为什么,我甚至不能得到控制台中显示的所有打印,尽管每一步都想要它。

collatz序列是通过以下规则计算的:

>

  • 如果n为奇数,则下一个数为n/2

    如果n为偶数,则下一个数为3n+1

    public static long collatz() {
    
        long res = 0;
        long n = 1;
        long count = 0;
        long largestCount = 0;
        long t = 0;
    
        for (long k = 1; k <= 20; k++) {
    
            n = k;
    
            while (n != 1) {
    
                if ((n % 2) == 0) {
                    n = n / 2;
                    count = count + 1;
                }
    
                else {
                    n = (3 * n) + 1;
                    count = count + 1;
    
                }
    
                if (count > largestCount) {
                    largestCount = count;
                    res = k;
                }
            }
        }
    
        System.out.println(res);
        return res;
    
    }
    
  • 共有1个答案

    任文乐
    2023-03-14

    您的代码应该正常运行。但它不是工作代码。您正在检查条件,以查看while循环中当前的计数是否大于当前的最大计数,这实际上没有意义,因为您需要获取collatz序列的长度,然后将其与当前的最大值进行比较。除此之外,你的代码很好。:)

    如果你感兴趣的话,这是我写的东西。

    final int number = 1000000;
    
    long sequenceLength = 0;
    long startingNumber = 0;
    long sequence;
    
    for (int i = 2; i <= number; i++) {
        int length = 1;
        sequence = i;
        while (sequence != 1) {
            if ((sequence % 2) == 0) {
                sequence = sequence / 2;
            } else {
                sequence = sequence * 3 + 1;
            }
            length++;
        }
    
        //Check if sequence is the best solution
        if (length > sequenceLength) {
            sequenceLength = length;
            startingNumber = i;
        }
    }
    System.out.println(startingNumber);
    
     类似资料:
    • 如何检测单个链表是否有循环??如果有循环,则如何找到循环的起始点,即循环开始的节点。

    • 我对java编程语言是新手。为什么在这段代码中有不同的输出?能给我解释一下问题吗?非常感谢。公共类Collatz{

    • 我需要帮助确定R中观察组中最长的连续值序列(=1)。 我有城镇月降雨量的数据。我需要确定每年月降雨量高于年平均值的最长时期(rain_above = 1)。如果每年有两个等长的时期,我想确定总降雨量最大的时期。 一些示例数据: 在df,A镇在2000年的第4个月到第8个月之间有一个雨季。这是rain_above=1的唯一时期。 B镇在2001年有一个雨季,在第1个月和第3个月之间。尽管有两个长度相

    • 到目前为止,这就是我的答案,但从逻辑上讲,我的答案对于findNextCity方法似乎是错误的。此外,我甚至不知道如何处理问题的第二部分(以下)。 我应该遍历cityQueue中的每个元素,使用下一种方法计算的欧几里德距离(distbetweencies),确定哪个元素最接近当前城市(从第一个参数)。我必须忽略已经标记在堆栈中或堆栈中的城市以及当前城市本身(否则,城市将始终是离自身最近的城市!)。

    • 我需要编写一个递归方法,将int作为输入,并以int(而不是字符串)的形式返回其中最长的相同数字序列。计数序列并不是最难的部分,但当给定一个包含几个序列的数字时,我不知道如何返回正确的值,而不计算所有的序列,而只计算最长的序列。目前,我编写了一段只计算序列长度的代码: 我真的很难完成剩下的事情。

    • 我需要找到字符串中最长的序列,并警告序列必须重复三次或更多次。例如,如果我的字符串是: fdwaw4helloworld vcdv1c3xcv3xcz1sda21f2sd1ahelloworld gafgfa4564534321fadghelloworld 然后我希望返回值“helloworld”。 我知道有几种方法可以做到这一点,但我面临的问题是,实际的字符串太大了,所以我真的在寻找一种能够及时