读书人

C++兑现排列组合

发布时间: 2013-04-12 18:33:12 作者: rapoo

C++实现排列组合

很多地方都遇过排列组合,比如计算问题的规模,数据的大小,占用磁盘空间多少等。

原理部分借鉴网上一篇文章,道理已经说的很清楚就不重复了。

(1) 全排列:

全排列表示把集合中元素的所有按照一定的顺序排列起来,使用P(n, n) = n!表示n个元素全排列的个数。

例如:{1, 2, 3}的全排列为:

123;132;

213;231;

312;321;

共6个,即3!=3*2*1=6。

这个是怎么算出来的呢?

首先取一个元素,例如取出了1,那么就还剩下{2, 3}。

然后再从剩下的集合中取出一个元素,例如取出2,那么还剩下{3}。

以此类推,把所有可能的情况取一遍,就是全排列了,如图:

C++兑现排列组合

#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;long factorial(int num){    long result=1;    for(int i=1;i<=num;i++){        result*=i;    }    return result;}long pnm(int num, int len){    return factorial(num)/len*factorial(num-len);}intmain(int argc, const char *argv[]){    if (argc < 2)  {        printf("usage:%s num", argv[0]);        return 0;    }    //printf("%s", argv[1]);    //return 0;    int num=atoi(argv[1]);    long result = factorial(num);    cout << "factorial result :" <<result<<endl;    cout << "pnm result :" << pnm(10, 9)<<endl;        return 0;}


组合部分待续。。


参考:

http://www.cnblogs.com/autosar/archive/2012/04/08/2437799.html

http://www.ixuela.com/shuxue/jiangjie/18300.html

http://www.360doc.com/content/10/0426/08/1217123_24908058.shtml

读书人网 >C++

热点推荐