题目
以下迭代序列定义在整数集合上:
n → n/2 (当 n 是偶数时)
n → 3n + 1 (当 n 是奇数时)
应用以上规则,并且以数字 13 开始,我们得到以下序列:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
可以看出这个以 13 开始以 1 结束的序列包含 10 个项。虽然还没有被证明(Collatz 问
题),但是人们认为在这个规则下,以任何数字开始都会以 1 结束。
以哪个不超过 100 万的数字开始,能给得到最长的序列?
注意: 一旦序列开始之后,也就是从第二项开始,项是可以超过 100 万的。
解析
题目要求:以上述规则为前提,遍历不超过100万的数字,找到最长的序列的数
遍历不超过100万以内的数,n → n/2 (当 n 是偶数时),n → 3n + 1 (当 n 是奇数时),同时记录序列的长度,用j记录,遍历开始时设置变量count(初始化为0)来记录最大长度,每次遍历的时候将j和max比较,来找到序列最大的值
代码
public class chapter7 {
public static void main(String[] args) {
// 记录最多项的数
long max=0;
// 记录最多次数
int count=0;
// 遍历
for(long i=2;i<=1000000;i++){
// 遍历的数
long temp=i;
// 计数器
int j=0;
// 结束条件
while(temp!=1){
// 偶数
if(temp%2==0){
temp/=2;
}
// 奇数
else{
temp=temp*3+1;
}
j++;
}
if(j>count){
count=j;
max=i;
}
}
System.out.println(max);
// 输出结果:837799
}
}