您现在的位置: 华盟网 >> 编程 >> C语言 >> 正文

计算一个数的所有组合数

2014/6/12 作者:不详 来源: 华盟收集
导读 计算一个数的组合数, 使用递归进行求解。  如果计算3位的组合数, 首先任选固定一位, 然后计算其余两位的组合数, 最后组合至一起。 如 1 + [23, 32…

计算一个数的组合数, 使用递归进行求解。

  如果计算3位的组合数, 首先任选固定一位, 然后计算其余两位的组合数, 最后组合至一起。 如 1 + [23, 32] = 123, 132;

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

  程序分为两步分, 一个删除任意位置的一个元素, 一个是递归求解组合数。

  代码:

  /*

  * 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();

  pre < } 0; return std::endl;

  《 result[i] std::cout { ++i)><BR><STRONG>输出:

  </STRONG><P></P><P></P><PRE class=brush:java;>4123

  </PRE><BR><BR><P></P><P><BR></P>

  <P sizcache08878593653388793="0.0.0" sizset="false">

  <IMG style="WIDTH: 560px;

  DISPLAY: inline;

  HEIGHT: 560px"

                  微信群名称:华盟黑白之道二群   华盟-黑白之道⑦QQ群: 9430885

  • 上一篇编程:

  • 下一篇编程:
  • 网友评论
      验证码
     

    关注

    分享

    0

    讨论

    2

    猜你喜欢

    论坛最新贴

    编程栏目相关内容

      没有相关编程