问题具体描述如下:
“数列定义是这样的:
n:n/2(n是偶数的时候)
n:3n+1(n是奇数的时候)
当开始的数是13时,数列如下所示
13->40->20->10->5->16->8->4->2->1
所以从13开始的数列长度为10。所有的数列都结束于1。
求开始数在1000000以下的数列长度最长的开始数。”
代码如下:
/**
* n n/2 (n 是偶数) n 3n + 1 (n 是奇数)
*
* @param n
* @return
*/
private static Long getNumber(int n) {
Long max =0L;
Long maxValue = 0L;
for(Long number=1L;number<n;number++){
Long temp = number;
Long i = 0L;
while (true) {
if (temp == 1) {
break;
} else if (temp % 2 != 0) {
temp = temp * 3 + 1;
} else {
temp = temp / 2;
}
i++;
}
if(max < i){
max = i;
maxValue = number;
}
}
return maxValue;
}
可以得到答案:837799。
运行的有点缓慢。
请不吝赐教。
@anthor ClumsyBirdZ