輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m 轉載

題目:編程求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將全部的可能組合列出來。編程

分析:分治的思想。能夠把問題(m,n)拆分(m - n, n -1)和(m, n - 1)。函數

注意點:一、n大於m時,可直接從n = m出開始搜索spa

    二、結束條件:n < 1 || m < 1code

    三、打印輸出結果。注意打印輸出結果並不表明函數調用結束,以n = 7 和 m = 10爲例,七、3和七、二、1都是一種結果,不能獲得七、3的時候終止。打印輸出的條件是n = mblog

程序代碼以下:rem

public class FindSum {
    // used as a stack to save the result
    private static LinkedList<Integer> list = new LinkedList<Integer>();

    public static void findSum(int sum, int n) {
        if (n < 1 || sum < 1)
            return;
        if (sum < n)
            n = sum;
        if (sum == n) {
            for (int i = 0; i < list.size(); i++)
                System.out.print(list.get(i) + " ");
            System.out.print(sum);
            System.out.println();
        }

        list.addLast(n);
        findSum(sum - n, n - 1);
        list.removeLast();
        findSum(sum, n - 1);
    }

    public static void main(String[] args) {
        int sum = 10;
        int n = 8;
        findSum(sum, n);
    }
}
相關文章
相關標籤/搜索