HZOJ-236:递归实现组合型枚举(c语言)

题目描述

​ 从 1−n 这 n 个整数中随机选取 m 个,每种方案里的数从小到大排列,按字典序输出所有可能的选择方案。

输入

​ 输入两个整数 n,m。(1≤m≤n≤10)(1≤m≤n≤10)

输出

​ 每行一组方案,每组方案中两个数之间用空格分隔。

​ 注意每行最后一个数后没有空格。

样例输入
3 2
样例输出
1 2
1 3
2 3
样例输入2
5 3
样例输出2
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5

#include
int ar[10] = { 0 };
void print_result(int* ar, int n) {
	for (int i = 0; i < n; i++) {
		if (i != 0) printf(" ");
		printf("%d", ar[i]);
	}
	printf("\n");
	return;
}
//在i位置最小填j,最大填n,最多枚举m位
void f(int i, int j, int n, int m) {
	if (i == m) {
		print_result(ar, m);
		return;
	}
	for (int k = j; k <= n; k++) {
		ar[i] = k;
		f(i + 1, k + 1, n, m);
	}
	return;
}
int main() {
	int n, m;
	scanf("%d %d", &n, &m);
	f(0, 1, n, m);
	return 0;
}

你可能感兴趣的:(算法题,算法)