冰雹猜測是指,一個天然數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)));//較大數據驗證 } }