#include <iostream>
#include <vector>
#include <algorithm> //从 indexs 集合中选择 num 个元素进行组合并保证返回的组合中没有重复的元素
std::vector<std::vector<int>> combination(const int num,std::vector<int> &indexs)
{
std::vector<std::vector<int>> set;
if (num > indexs.size())return set; std::vector<int> elements;
elements.resize(indexs.size());
for (int i = 0; i < num; i++)
{
elements.at(i) = 1;
} do
{
std::vector<int> currentCombination;
for (size_t i = 0; i < elements.size(); ++i)
{
if (elements[i])
{
currentCombination.push_back(indexs[i]);
}
}
set.push_back(currentCombination);
} while (prev_permutation(elements.begin(), elements.end())); //std::cout << set.size() << std::endl;
return set;
} std::ostream& operator<<(std::ostream& os, const std::vector<std::vector<int>>& data)
{
for (int i = 0;i < data.size();i++)
{
os << i << ": ";
for (int j = 0;j < data[i].size();j++)
{
os << data[i][j] << ",";
}
os << "\n";
}
return os;
} inline unsigned int factorial(unsigned int value)
{
unsigned int local_value = value;
while (value-- > 1)
{
local_value *= value;
}
return local_value;
} unsigned int combination(unsigned int k,unsigned int n)
{
if (k > n)
{
return 0;
}
return factorial(n)/ (factorial(k)*factorial(n - k));
} int main()
{
std::vector<int> indexs = { 1,2,3,4,5,6,7,8,9 };
const int num = 4; std::cout << combination(num, indexs) << std::endl; getchar();
return 0;
}

如何使用 stl 进行排列组合?的更多相关文章

  1. 对N各集合中的任意元素进行排列组合问题

    小李去市场买菜,有蔬菜(茄子.黄瓜.大白菜...等k中素菜),和肉类(牛肉,羊肉,鸡肉...等m种荤菜),及点心(麻饼,桃酥,枣花...等n中点心),现在老婆要求每天一荤一素一点心 并且每天的样式要尽 ...

  2. 【python 3.6】使用itertools.product进行排列组合

    #python 3.6 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'BH8ANK' import itertools colo ...

  3. STL学习小结

    STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...

  4. C++写一个排列组合小程序

    今天突然想到一个问题,有时候,针对同一个事件有多种反映,特别是游戏AI当中,这种情况下需要采取最适合的方案,哪种方案最适合,可以将每种方案的结果或影响都计算一遍,从而选择最合适的.最基本就是一个排列组 ...

  5. 排列组合函数next_permutation()

    next_permution(),按照字典序进行排列组合, 括号里的参数为类似sort里面的参数,用法相同 #include <bits/stdc++.h> using namespace ...

  6. STL学习总结

    STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合.这些" ...

  7. 【Python】排列组合itertools & 集合set

    ■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...

  8. <经验杂谈>介绍Js简单的递归排列组合

    最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组 ...

  9. 数字货币量化教程——使用itertools实现各种排列组合

    在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优参数 一.数据准备 import itertools items = [1, 2, 3] ab = ['a', 'b'] ...

随机推荐

  1. 非等高cell实战--实现微博页面

    代码地址如下:http://www.demodashi.com/demo/11639.html 前言 学习过UITableView.AutoLayout以及MVC的相关知识,接下来通过一个微博页面实战 ...

  2. 未能加载文件或程序集“WebGrease, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    方法一:在web.config的configuration接点中添加,最好是添加在configuration节点的最后 <runtime> <assemblyBinding xmln ...

  3. SpringCloud系列九:脱离Eureka使用Ribbon

    1. 回顾 在前文的示例中,是将Ribbon与Eureka配合使用的.但是现实中可能不具备这样的条件,例如一些遗留的微服务,它们可能并没有注册到Eureka Server上, 甚至根本不是使用Spri ...

  4. pthread_create11121

    #include <stdlib.h> #include <stdio.h> #include <pthread.h> void* test(void* args) ...

  5. jquery的post()

    jQuery ajax - post() 方法 jQuery Ajax 参考手册 实例 请求 test.php 网页,忽略返回值: $.post("test.php"); TIY ...

  6. Android Studio 使用笔记: 重命名和重构

    重命名 选中一个变量名称,菜单才是可用状态.然后可以根据系统给出的建议或者自己重新定义变量名称. 快捷键:Shift + F6 (Windows和Mac都是一样的) 重构 选中需要重构的代码,可以按照 ...

  7. window安装mysql

    window安装mysql 1. 官网下载mysql zip安装包,然后解压到你想安装的目录,假设解压的目录是P:\mysql 解压完的目录:bin docs include lib share CO ...

  8. Vsphere日记02.ESXi5.5.configuration

    2.Vsphere ESXi 5.5 configuration 步骤1:启动 ESXI 服务器 步骤2:按 F2 进入用户登录界面 输入用户名及密码,进入参数设置界面.密码为我安装时候设置的&quo ...

  9. Spell checker - poj 1035 (hash)

      Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22541   Accepted: 8220 Description Yo ...

  10. 我的第二个java程序 循环

    public class Test {//类 public Test (int num){//构造方法,和类同名,无返回值,接收传参并定义传参的类型,大小写敏感 int x = 10;//局部变量,定 ...