编程算法 - 计算一个数的所有组合数 代码(C++)

计算一个数的所有组合数 代码(C++)


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


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

如果计算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





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ManonLegrand

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值