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}。
以此类推,把所有可能的情况取一遍,就是全排列了,如图:

#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