ber_ker 2024-05-05 11:31 采纳率: 44.4%
浏览 2

组合数全部方案问题【】

求从n个数中取出m个数的所有方案

不用输出

输入:

3 2

1 3 2 应有

1,2 1,3 2,3

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-05 11:31
    关注

    引自免费微信小程序:皆我百晓生

    为了解决这个问题,我们可以使用递归的方式来生成所有可能的组合。这里有一个简单的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 
    

    这就是从三个数中取出两个数的所有可能组合。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月5日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据