C++ 排列组合

原创 2016年08月29日 12:50:56
从n个数中取m个的随机组合。
看起来很简单的东西,实现起来真烦。。。。。。搞了一个多小时才想明白。

#include
using namespace std;

void combine(int a[], int n,int m , int b[], int M)
 int i, j;

 for (i = n; i >= m; i--)
  {
   b[m - 1] = i - 1;
   if (m > 1)
    combine(a, i - 1, m - 1, b, M);
   else
    {
     for (j = M - 1; j >= 0; j--)
      printf("%d ", a[b[j]]);
     printf("\n");
    }
  }
}

int main(){
int a[4] = {1,2,3,4};
int b[20];
combine(a,4,2,b,2);
}


核心思想就是比如我们要取3个组合, 从大往小取,先取4  b[m - 1] = i - 1;),然后再在剩下的数组(3,2,1)中取一个,然后再在剩下的数组中去一个。  反正取3次。
每次for (i = n; i >= m; i--) 这个for循环其实只给 b[m - 1] = i - 1; 赋值1次。

 我们还是从大往小取,递归 combine(a, i - 1, m - 1, b, M);
我们可以看出combine(a, i - 1, m - 1, b, M); 下一轮是combine(a,3, 3 - 1, b, 3);
这个递归中其实包含了(3,2,1) 取3个的排列组合。

然后combine(a,3, 2, b, 3);  再下面就是combine(a,2, 1, b, 3);  
递归结束
可以看到一共3层递归。每一层其实都返回了一个b[m - 1] 。。。。循环打印出来。


再看看combine(a,5, 3, b, 3);
反正选几个数排列,递归深度就是几。递归3

C++ 排列组合

从n个数中取m个的随机组合。 看起来很简单的东西,实现起来真烦。。。。。。搞了一个多小时才想明白。 #include using namespace std; void combine(int a...
  • leexurui
  • leexurui
  • 2016年08月29日 12:50
  • 136

JavaScript实现数学里的排列组合的A和C运算

//自定义组合函数(就是数学排列组合里的C)     function combination(m,n){         return factorial(m,n)/factorial(n,n);/...
  • qq_27682041
  • qq_27682041
  • 2017年06月05日 16:53
  • 979

深入探讨:如何实现排列组合

一、引言当你点开了这篇博客,希望你能站在跟我一起探讨的角度上来思考这个问题,那么也许你能获得更多的启示 ^_^。最近在做 LeetCode 的时候,有一道题让我想到了另一个问题: 如何编程实现排列...
  • u012814856
  • u012814856
  • 2017年06月28日 20:07
  • 628

js 实现排列组合

javascript实现数学中的排列组合。
  • u011113654
  • u011113654
  • 2017年06月11日 17:01
  • 1107

排列组合问题的C++代码

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述:...
  • su_sai
  • su_sai
  • 2017年02月28日 18:02
  • 379

排列组合学习

高中排列组合内容 组合数的几个性质 1:C(k,n)=C(n-k,n) 2:C(k,n)=C(k,n-1)+C(k-1,n-1) 3:sigema   C(i,n)==2^n   例一: 七位同学站成...
  • running_in_dark
  • running_in_dark
  • 2016年09月25日 15:28
  • 392

字符串的排列组合算法合集

http://blog.csdn.net/hackbuteer1/article/details/7462447 全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递...
  • sjpz0124
  • sjpz0124
  • 2015年06月25日 20:58
  • 1002

C# 排列组合取值

using System; using System.Collections.Generic; using System.Linq; using System.Text; cla...
  • gtosky4u
  • gtosky4u
  • 2015年06月16日 10:05
  • 624

STL算法 -------- 排列组合

1. next_permutation()            原始数据为升序 2. prev_permutation()            原始数据为降序 #include #inc...
  • u011334621
  • u011334621
  • 2015年03月10日 11:56
  • 753

轻松用python实现排列组合功能

原文地址:http://blog.sina.com.cn/s/blog_62d4d5900101erdd.html 是不是还在为排列组合各种算法头疼,还要担心各种临界条件判断等等,其实p...
  • zahuopuboss
  • zahuopuboss
  • 2015年09月06日 11:35
  • 1278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 排列组合
举报原因:
原因补充:

(最多只允许输入30个字)