#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. 使用 Google 高级搜索的一些技巧

      一,GOOGLE简介 Google(www.google.com)是一个搜索引擎,由两个斯坦福大学博士生Larry Page与Sergey Brin于1998年9月发明,Google Inc. 于 ...

  2. VC 使用json cpp 静态库 问题解决

    release使用 json 静态库 提示 fatal error C1083: 无法打开编译器生成的文件:“../../build/vs71/release/lib_json\json_writer ...

  3. PHP多线程处理问题

    近日工作中涉及到项目同时处理多个线程问题时,在网上找到了PHP的pthreads扩展以及curl_multi_init函数,具体如下: 一 .windows下安装php真正的多线程扩展pthreads ...

  4. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序:#include<reg52.h>  void main(void)  {   EA=1;      //开放总中断   E ...

  5. sql server 数据库基础知识(二)

    CASE函数用法1:单值判断,相当于switch caseCASE expression WHEN value1 THEN returnvalue1 WHEN value2 THEN returnva ...

  6. phpexcel图形图表(二)图形

    原创文章,转载请注明出处:http://www.cnblogs.com/phpgcs 本篇文章实例演示如上图,画3种图形以及多sheet操作等 先回忆下第一篇中line图形的API调用步骤: 1,引入 ...

  7. hdu3208 Power of Integer

    /** 题目:H - Power of Integer 链接:https://vjudge.net/contest/152887#problem/H 题意:给出区间[a, b],问你区间[a, b]所 ...

  8. linux IP动态变动之后 , 需要做的杂项操作

    linux的动态ip经常变来变去,目前还没找到固定它不变化的方法.所以每次变动之后都需要做以下的操作,极其麻烦.(必须找到让linux IP 固定的方法) 1.先找到变化之后的动态ip地址 ifcon ...

  9. WebMethod Session

    [WebMethod(EnableSession = true)] public static string SayHello() { LxUserContext depno = HttpContex ...

  10. jdk的安装 打包jar 运行jar

    安装 系统变量→新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME ...