角谷定理 Collatz


题:数组与动态数组_验证步骤
角谷定理说: 任何一个正整数,如果是偶数,则除以2,如果是奇数则乘以3再加1,如此反复,必能最终得到1。
这里不要求你证明这个定理,只需要验证10000以内的所有整数哪个经过了最长的步骤,最后才得到1, 并输出这个步骤。

比如对9,输出:

9 28 14 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

源码Collatz.java


import java.util.ArrayList;

public class Collatz {
    public static void main(String[] args) {
        
        int x = 10000;
        int k = 0;
        int t = 0;
        int tm = 0;
        int num = 0;
        for (int i=1; i<=x; i++) {
            t = 0;
            k = i;
            while (k!=1) {
                if ((k&1)==0) {
                    k = k/2;
                }
                else {
                    k = k*3+1;
                }
                t++;
            }
            if (tm<t) {
                tm = t;
                num = i;
            }
        }
        
        System.out.println("most step: "+tm);
        System.out.println("the number is: "+num);
        System.out.println("Steps:");
        ArrayList<Integer> lst = new ArrayList<Integer>();
        k = num;
        while (k!=1) {
            lst.add(k);
            if ((k&1)==0) {
                k = k/2;
            }
            else {
                k = k*3+1;
            }
            t++;
        }
        lst.add(1);
        System.out.println(lst);
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注