T2.最长的考拉兹序列(11.23打卡)

最长的考拉兹序列

题目

以下迭代序列定义在整数集合上:
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
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值