描述:
给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小于120
输入例子1:
6 8
输出例子1:
4
思路:
package cn.edu.ncu.algorith;
import java.util.Scanner;
public class Main {
public static int add(int start, int[] nums, int remain,int count) {
int remain1 = remain - nums[start];// 剩余
if (remain1 == 0) {//3:剩下为0证明存在一个组合=目标值,count+1
count++;
return count;
}
if (remain1 > nums[start]) {//4: 剩余如果大于目前为止上的数字才能进行下一个循环否则直接跳出
for (int i = start + 1; i < nums.length; i++) {
count = add(i, nums, remain1,count);
}
} else {
return count;
}
return count;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int n = sc.nextInt();
int m = sc.nextInt();
int count=0;
int[] nums = new int[n];
for (int i = 1; i <=n; i++) {//1:n分布到数组
nums[i-1]=i;
}
for (int i = 0; i < nums.length; i++) {//2:从1到n一次查找
count=add(i,nums,m,count);
}
System.out.println(count);
}
}
}