编程算法 - 组合数 代码(C)

来源:互联网 发布:多功能网络表 编辑:程序博客网 时间:2024/06/05 20:43

组合数 代码(C)


本文地址: http://blog.csdn.net/caroline_wendy


一个字符串的组合数, 如abc, 输出的是a, b, c, ac, ab, bc, abc, 即包含顺序的组合.

类似位(bit)的全排列, 如 001, 010, 100, 011, 101, 110, 111.


代码:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  * main.cpp 
  3.  * 
  4.  *  Created on: 2014.7.20 
  5.  *      Author: Spike 
  6.  */  
  7.   
  8. /*eclipse cdt, gcc 4.8.1*/  
  9.   
  10. #include <iostream>  
  11. #include <vector>  
  12. #include <string>  
  13. #include <cmath>  
  14.   
  15. using namespace std;  
  16.   
  17. string BinaryString(string s, int i) {  
  18.     string tmp;  
  19.     int k=0;  
  20.     while (i != 0) {  
  21.         if (i & 0x1)  
  22.             tmp.push_back(s[k]);  
  23.         k++;  
  24.         i >>= 1;  
  25.     }  
  26.     return tmp;  
  27. }  
  28.   
  29. vector<string> Combination(string s) {  
  30.     vector<string> vs;  
  31.     if (s.length() == 0)  
  32.         return vs;  
  33.     int num = pow(2.0, s.length());  
  34.     for (int i=1; i<num; ++i) {  
  35.         string tmp = BinaryString(s, i);  
  36.         vs.push_back(tmp);  
  37.     }  
  38.     return vs;  
  39. }  
  40.   
  41. int main(void)  
  42. {  
  43.     string s = "abc";  
  44.     vector<string> vs = Combination(s);  
  45.     for (size_t i=0; i<vs.size(); ++i) {  
  46.         cout << vs[i] << endl;  
  47.     }  
  48.     return 0;  
  49. }  




输出:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. a  
  2. b  
  3. ab  
  4. c  
  5. ac  
  6. bc  
0 0