C++計算一個數的所有組合數

來源:互聯網
上載者:User

計算一個數的組合數, 使用遞迴進行求解.

如果計算3位的組合數, 首先任選固定一位, 然後計算其餘兩位的組合數, 最後組合至一起. 如 1 + [23, 32] = 123, 132;

在固定其餘位元, 如 2 + [13, 31] = 213, 231;  3 + [12, 21] = 312, 321;

程式分為兩步分, 一個刪除任意位置的一個元素, 一個是遞迴求解組合數.

更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

代碼:

/*  * Combination.cpp  *  *  Created on: 2014.6.9  *      Author: Spike  */      /*eclipse cdt, gcc 4.8.1*/      #include <iostream>  #include <vector>  #include <string>        using namespace std;        void deleteOneNum (std::string& _num, std::size_t _n) {      if (_n >= _num.length()) {          return;      }      string temp (_num.substr(_n+1));      _num = _num.substr(0, _n) + temp;  }        void combination (std::string _num, std::string _buff,          std::vector<std::string>& _result)  {      if (_num.length() <= 0) {          _result.push_back(_buff);      }            for (std::size_t i=0; i<_num.length(); ++i) {          std::string temp (_num);          deleteOneNum(temp, i);          combination(temp, _buff+_num[i], _result);      }  }        int main (void) {      std::string num("4123");      std::vector<std::string> result;      combination(num, "", result);      for (std::size_t i=0; i<result.size(); ++i) {          std::cout << result[i] << std::endl;      }      return 0;  }

輸出:

4123  4132  4213  4231  4312  4321  1423  1432  1243  1234  1342  1324  2413  2431  2143  2134  2341  2314  3412  3421  3142  3124  3241  3214

作者:csdn部落格 Spike_King

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。