在执行我要实现Collatz Conjecture的Java作业时,我想到了一个不同的目标,即找到最长的Collatz序列。我的程序计算步骤如下:
public class Collatz {
static int count = 0;
static void bilgi (int n){
int result = n;
System.out.println("Result: "+result+ " Step: "+count);
if (result <= 1) {
result = 1;
} else if (result%2 == 0){
result = result/2;
count = count + 1;
bilgi(result);
} else {
result = (result*3)+1;
count = count + 1;
bilgi(result);
}
}
public static void main(String[] args) {
bilgi(27);
}
}
我想找到最高步数。
答案 0 :(得分:2)
任何初始起始数低于1亿的最长进展为63,728,127,其中有949步。对于不到10亿的起始数字,它是670,617,279,有986步,对于不到100亿的数字,它是9,780,657,630,有1132步
答案 1 :(得分:1)
static int bilgi(int n) {
int result = n;
if (result <= 1) return 1;
if (result % 2 == 0) return 1+bilgi(result/2);
return 1+bilgi(3*result+1);
}
然后你收集bilgi(i)
个电话的结果并选择最大值。
答案 2 :(得分:0)
如果您要查找1到100之间的最大值,则可以替换:
public static void main(String[] args) {
bilgi(27);
}
with:
public static void main(String[] args) {
static int maxcountsofar = 0;
static int start = 0;
static int thisone = 0;
for (int iloop = 1; iloop <= 100; iloop++)
{
thisone = bilgi(iloop);
if (thisone > maxcountsofar)//if this one is bigger than the highest count so far then
{
start = iloop;//save this information as best so far
maxcountsofar = thisone;
}
}
System.out.println("Result: " + start.Tostring() + " Step: " + maxcountsofar.Tostring() );
//I know this is a really old post but it looked like fun.
}
/ * 另外,从bilgi()函数中取出println(),它会为遇到的每个步骤生成一行,这将是毫无价值且非常耗时的。
使用Vesper的bigli(),因为它比你的快得多。 * /
答案 3 :(得分:0)
我知道这是一个老问题,但我只是在解决它,我会建议任何人这样做,只是使用一个arraylist并获得.size(),我这样做,因为我想看到价值观也是如此。