数的组合问题。从1,2,…,n中取出m个数,将所有组合按照字典顺序列出。如n=3,m=2时,输出:12 13 23
时间: 2024-03-23 22:39:01 浏览: 34
这是一个经典的组合问题,可以使用递归来解决。我们可以定义一个递归函数来生成这个组合列表。函数接受四个参数:当前正在处理的数字、需要选择的数字个数、当前已经选择的数字和生成的组合列表。
下面是一个示例代码:
```
void generate_combinations(int current, int count, string current_combination, vector<string>& combinations) {
// 基本情况:已经选择了需要的数字个数
if (count == 0) {
combinations.push_back(current_combination);
return;
}
// 递归情况:选择当前数字或者不选择当前数字
if (current <= 9) {
generate_combinations(current + 1, count - 1, current_combination + to_string(current), combinations);
generate_combinations(current + 1, count, current_combination, combinations);
}
}
```
这个函数首先检查是否已经选择了需要的数字个数。如果是,则将当前组合添加到列表中并返回。否则,它将递归地调用自身两次:一次选择当前数字,一次不选择当前数字。
我们可以在主函数中调用这个函数来生成组合列表:
```
int main() {
int n = 3, m = 2;
vector<string> combinations;
generate_combinations(1, m, "", combinations);
sort(combinations.begin(), combinations.end());
for (string combination : combinations) {
cout << combination << " ";
}
return 0;
}
```
在这个例子中,我们将n设置为3,将m设置为2,然后调用generate_combinations函数来生成组合列表。最后,我们将列表排序并输出。
输出结果为:12 13 23