1. 程式人生 > >Java實現輸入兩個整數n和m,從0-n中隨意取幾個數,使其和等於m

Java實現輸入兩個整數n和m,從0-n中隨意取幾個數,使其和等於m

程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。
思路:
1.首先判斷,如果n>m,則n中大於m的數不可能參與組合,此時置n = m;
2.將最大數n加入且n == m,則滿足條件,輸出;
3.將n分兩種情況求解,
(1)n沒有加入,取n = n - 1; m = m;遞迴下去;
(2)n加入,取n = n - 1, m = m - n,遞迴下去


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import
java.util.Scanner; public class Demo{ private static List<Integer> list = new ArrayList<>(); private static List<List<Integer>> res = new ArrayList<>(); public static void findSum(int sum, int n) { if (n < 1 || sum < 1) return; if
(sum <= n) {//注意是小於等於 list.add(sum); // sum < n ,直接加入sum可以滿足了 res.add(new LinkedList<>(list)); list.remove(list.size() - 1); // count++;//求個數 return; } list.add(n); findSum(sum - n, n - 1);// n加入,取n=n-1,sum=sum-n
list.remove(list.size() - 1); findSum(sum, n - 1); // n沒有加入,取n=n-1,sum=sum } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt();//n int sum = scanner.nextInt();//m findSum(sum, n); System.out.println(res); //System.out.println(count); //count = 0; //求符合條件的個數 res = new ArrayList<>();//重置res list } } }