C++计较一个数的所有组合数
当前位置:以往代写 > C/C++ 教程 >C++计较一个数的所有组合数
2019-06-13

C++计较一个数的所有组合数

C++计较一个数的所有组合数

计较一个数的组合数, 利用递归举办求解.

假如计较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(); ++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

    关键字:

在线提交作业