查找具有最高术语数量的Collat​​z序列

时间:2016-11-12 19:18:10

标签: java arrays collatz

我目前正在处理有关Collat​​z猜想的问题。 我将附上问题的图像。

Question (from ProjectEuler)

现在问题显然在1到1,000,000之间。但我通过允许用户选择起点和终点应该在哪里来增加一些功能。虽然我遇到了问题。 (作为没有任何编程经验的第一年CS学生,我的知识目前非常有限)。

我的想法是如何找到序列最高或最高的那个'loopCount'是将数字及其相应的循环计数推入数组,并尝试在该数组中找到最大循环计数值。但就我而言,这将涉及一个二维阵列。

正如我所说,我的编程技巧有限(我们还没有覆盖阵列),所以我不知道如何开始这个。

这是我到目前为止所拥有的:

    System.out.println("Enter starting point:");
    Scanner userStartingPoint = new Scanner(System.in);
    long startingPoint = userStartingPoint.nextInt();

    System.out.println("Enter ending point:");
    Scanner userEndingPoint = new Scanner(System.in);
    long endingPoint = userEndingPoint.nextInt();

    long timeBefore = System.currentTimeMillis();
    int loopCount;

    for(long i = startingPoint; i <= endingPoint; i++) {

        long number = i;
        loopCount = 1;

        while(number != 1) {
            if(number%2 == 0) {
                number = number/2;
            } else if(number%2 != 0) {
                number = (3*number)+1;
            }
            loopCount++;
        }

        System.out.println("Number: " + i + ". " + "Loop count: " + loopCount + ".");
    }

    long timeAfter = System.currentTimeMillis();
    long timeTaken = timeAfter - timeBefore;
    System.out.println(endingPoint - startingPoint + " sequences.");
    System.out.println("Time taken: " + timeTaken/1000 + " seconds.");

我使用了很长时间的&#39;作为这里的许多变量的数据类型,因为我发现有些数字的迭代次数超过了&#39; int&#39;数据类型可以处理。

1 个答案:

答案 0 :(得分:0)

只需将最高的loopCount保存在一个额外的变量中,并在每次迭代后更新它,如果它增加的话。

int maxCount = 0;
int loopCount;

for(long i = startingPoint; i <= endingPoint; i++) {

    long number = i;
    loopCount = 1;

    while(number != 1) {
        if(number%2 == 0) {
            number = number/2;
        } else if(number%2 != 0) {
            number = (3*number)+1;
        }
        loopCount++;
    }
    if(loopCount > maxCount){
        maxCount = loopCount;
    }
    System.out.println("Number: " + i + ". " + "Loop count: " + loopCount + ".");
}
System.out.println("Highest loopCount : " + maxCount);