问题:设数组A中存放互不相同的n个整数,试编写算法,输出从这n个数中取出k个的所有组合(k<= n)。例如:若A中存放的数是1,2,3,4,5,k=3,则输出结果为:543,542,541,532,531,521,432,431,421,321
算法:
import java.util.Scanner;
public class sx13 {
private static Scanner input;
public static void main(String[] args) {
int n, k = 0, m = 0;
input = new Scanner(System.in);
System.out.println("请输入数组的长度:");
n = input.nextInt();//输入n的值
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = input.nextInt();//输入数组里的数
// System.out.println(a[i]);
}
System.out.println("请输入K的值");
k = input.nextInt();//输入k的值
System.out.println("k的值为:" + k);
f(n, k, a, m);
}
static void f(int n, int k, int a[], int m) {
int i;
// 当k==0的时候,将数组里面的三个数依次输出
if (k == 0) {
for (int j = 0; j < m; ++j) {
System.out.print(a[j]);
}
System.out.print(" ");
}
else {//实现移位的过程,将最大值移到数组的第一位置,依次移动
for (i = n; i >= k; --i) {
a[m] = i;
f(i - 1, k - 1, a, m + 1);
}
}
}
}
结果为: