Scroll to top

20175234 2018-2019-2 个人项目:数字黑洞(二):冰雹猜想

定义

冰雹猜想是指,一个自然数x,如果是奇数就乘以3再加1,如果是偶数就析出偶数因数2ⁿ,这样经过若干个次数,最终回到1。

适用条件

在小于7*10^11的所有的自然数。

伪代码

(一)输入N
(二)递归调用
    while(N!=1){
    if(N为偶数)
    while(N%2==0){
    N=n/2;
    }
    Else
    N=n*3+1;
    }
(三)退出循环则验证成功

产品代码

package 冰雹猜想;
import java.util.Scanner;
public class Collatz {
    public static void main(String[] args) {
        int x = 0;
        do {
            System.out.println("请输入一个自然数");
            Scanner reader = new Scanner(System.in);
            x = reader.nextInt();
        } while (x <= 0 || x > 7 * Math.pow(10, 11));

        dispose a = new dispose();
        a.dispose(x);

    }
}
package 冰雹猜想;

public class dispose {
    public int dispose(int x) {

        int i = 0;
        while (x != 1) {
            if (x % 2 == 0) {
                while (x % 2 == 0) {
                    x = x / 2;
                }
            } else {
                x = x * 3 + 1;
            }
            i++;
            System.out.println(+i + "次运行后结果为" + x);
        }
        System.out.println("已验证");
        return  x;
    }
}

测试代码

package Collatz;

import Collatz.dispose;
import junit.framework.TestCase;

public class disposeTest extends TestCase {
    dispose d=new dispose();
    public void testDispose() {
        assertEquals(1,d.dispose(1));//边界
        assertEquals(1,d.dispose(24));//偶数
        assertEquals(1,d.dispose(27));//奇数,强悍的27验证
        assertEquals(1,d.dispose(7 * (int)Math.pow(10, 10)));//较大数据验证
    }
}

测试截图

码云链接

参考资料

posted @ 2019-04-22 21:56  September_starlet  阅读(573)  评论(3编辑  收藏  举报
动态线条
动态线条end