该程序是求组合和组合数,
就是概率论中的C(无序)
排列就是概率论的A(有序)
其实组合也是回溯算法
import java.util.Scanner;
public class 组合序列 {
public static void main(String[] args) {
int[] result = new int[10];
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int[] a = new int[N];
for(int i = 0;i < N;i++) {
a[i] = i + 1;
}
zuhe(a, N, K, 0, 0, result);
System.out.println(sumZuhe(N, K));
}
public static void zuhe(int[] a,int N,int K,int index,int deep,int[] result) {
if(deep >= K) {
for(int i = 0;i < K;i++) {
System.out.print(result[i]);
}
System.out.println();
return;
}
for(int i = index;i < N;i++) {
result[deep] = a[i];
deep++;
zuhe(a, N, K, index + 1, deep, result);
deep--;
index++;
}
}
public static int sumZuhe(int N,int K) {
if(K == 0) {
return 1;
}
if(N == K) {
return 1;
}
return sumZuhe(N - 1, K - 1) + sumZuhe(N - 1, K);
}
}
这个程序就是组合,就是Cnk,
例如C53的结果就是:
123
124
125
134
135
145
234
235
245
345
10//代表有10种情况