把一個數分解成任意幾個數之和

例如:4的結果有,(1+3),(2+2),(1+1+2),(1+1+1+1)

public class Demo {
    // 存儲每次分割的值
    static int[] arr;
    // 需要分割的值
    static int num = 4;

    public static void main(String[] args) {
        // 分割的值最多分成1+1+...+1 最多就是他本身的長度
        arr = new int[num];
        search(num,1,0);
    }

    /**
     * 計算
     * @param n 需要計算的數
     * @param s 需要拆分的最小數
     * @param x 分割存儲的下標
     */
    private static void search(int n, int s, int x) {
        // 當需要計算的數大於0的時候纔開始計算
        if(n>0) {
            for(int i=s;i<=n;i++) {
                // 存儲本次分割出的值
                arr[x]=i;
                // 計算分割剩餘的值 同時存儲的下標+1
                search(n-i,i,x+1);
            }
            return;
        }
        // 如果分割的值和分割出來的第一個值相同時 說明該值不可分割 不進行輸出
        if(num != arr[0])
            System.out.print(num+"="+arr[0]);
        // 循環把分割出來的數組拼接
        for(int i=1;i<x;i++) {
            System.out.print("+"+arr[i]);
        }
        //換行
        System.out.println();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章