演算法案例2-求冰雹數 java程式碼實現

品茶的橘子發表於2020-11-24

介紹:
冰雹數

任意給定一 個正整數N,

如果是偶數,執行: N /2

如果是奇數,執行: N*3+1

生成的新的數字再執行同樣的動作,迴圈往復。

通過觀察發現, 這個數字會一會兒上升到很高,

一會兒又降落下來。

就這樣起起落落的,但最終必會落到"1"

這有點像小冰雹粒子在冰雹雲中翻滾增長的樣子。

例子

比如=9

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

可以看到,N=9的時候,這個小冰雹“最高衝到了52這個高度。

分析:
這個演算法實現很簡單,只需要用if判斷一下奇偶數然後按照特定的算式進行計算即可
然後可以建立一個動態陣列進行排序 sort 最大的就是我們要得到的數
輸入格式:

一個正整數N (N<1000000)

輸出格式:

一個正整數,表示不大於w的數字,經過冰雹數變換過程中,最高衝到了多少。
例如,輸入: 10
程式應該輸出: 52

程式碼實現

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class solution {
	public static void main(String[] args) {
		 //鍵盤錄入一個資料
		 Scanner sc = new Scanner(System.in);
		 int s = sc.nextInt();
		 //呼叫方法
		 bbs(s);
	}
	//建立一個動態陣列
	public static ArrayList<Integer> li = new ArrayList<>();
	public static void bbs(int n) {
		
		int a = 0;
		//遞迴終止條件
		if(n == 1) {
			//正序。由小到大
			Collections.sort(li);
			//逆序,由大到小
			Collections.reverse(li);
			//輸出這個集合 
			System.out.println(li);
			//因為是逆序排序,所以最小的的索引值就是我們想要的
			System.out.println(li.get(0));
			return;
		}
		
		
		//執行要求
		if(n%2 == 0) {
			a = n/2;
		}else {
			a = n*3+1; 
		}
		li.add(a);
		//遞迴迴圈條件
		bbs(a);
	}
}

程式碼實現結果

相關文章