20175234 2018-2019-2 我的項目:數字黑洞(二):冰雹猜測

定義

冰雹猜測是指,一個天然數x,若是是奇數就乘以3再加1,若是是偶數就析出偶數因數2ⁿ,這樣通過若干個次數,最終回到1。git

適用條件

在小於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)));//較大數據驗證
    }
}

測試截圖

碼雲連接

參考資料

相關文章
相關標籤/搜索