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

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

輸出 -1 pri str spa private 組合 開始 ()

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

分析:分治的思想。可以把問題(m,n)拆分(m - n, n -1)和(m, n - 1)。

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

    2、結束條件:n < 1 || m < 1

    3、打印輸出結果。註意打印輸出結果並不代表函數調用結束,以n = 7 和 m = 10為例,7、3和7、2、1都是一種結果,不能得到7、3的時候終止。打印輸出的條件是n = m

程序代碼如下:

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); } }

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