求从n个数中取出m个数的所有方案
不用输出
输入:
3 2
1 3 2 应有
1,2 1,3 2,3
引自免费微信小程序:皆我百晓生
为了解决这个问题,我们可以使用递归的方式来生成所有可能的组合。这里有一个简单的C++程序可以实现这个功能。
#include <iostream>
#include <vector>
void generate_combinations(int n, int m, std::vector<int>& nums, std::vector<int>& current, int start) {
if (m == 0) {
// 如果当前组合中的元素数量等于m,打印当前组合
for (int num : current) {
std::cout << num << " ";
}
std::cout << std::endl;
return;
}
for (int i = start; i < n; i++) {
// 将nums[i]添加到当前组合中,并继续生成剩余的组合
current.push_back(nums[i]);
generate_combinations(n, m - 1, nums, current, i + 1);
// 回溯,移除当前元素,尝试下一个元素
current.pop_back();
}
}
int main() {
int n, m;
std::cin >> n >> m;
std::vector<int> nums = {1, 2, 3}; // 这里假设你已经知道数字,如果是动态输入,你需要修改这部分
std::vector<int> current;
generate_combinations(n, m, nums, current, 0);
return 0;
}
这个程序首先定义了一个名为generate_combinations
的递归函数,它接受四个参数:n(总元素数量)、m(需要选择的元素数量)、一个包含原始数字的向量、一个用于存储当前组合的向量以及一个起始索引。
在主函数中,我们读取用户输入的n和m值,并创建一个包含给定数字的向量。然后调用generate_combinations
函数开始生成组合。
注意:这个程序假设了数字已经存在在一个向量中,如果你需要从输入流中获取这些数字,你需要在main
函数中对nums
进行初始化,例如通过循环读取用户输入的数字。
运行此程序,输入 3 2
,将会得到输出:
1 2
1 3
2 3
这就是从三个数中取出两个数的所有可能组合。