您的位置:首页 > 其它

递归全组合问题

2017-07-27 10:09 169 查看
有m个砝码,重量分别为1g,2g,3g,……,mg,问可以组合成多少种重量,每种重量有多少种组合方式,例如:

输入1,2,3;输出6,{1,1},{2,1},{3,2},{4,1},{5,1},{6,1},表示能组合成3种重量,括号中第一个数表示重量,第二个数表示组合方式数量。

#include "stdafx.h"
#include<iostream>
using namespace std;
//全局变量,用于存放结果,w[i]表示重量i的组合方式数量
int w[100];
//递归函数,用于求取结果
void fun1(int *array, int length)
{
//结束递归的条件
if (length == 1)
{
w[array[0]]++;
return;
}

fun1(array + 1, length - 1);//递归

//记录此轮递归的结果
for (int j = 99; j >= 0; j--)
{
if (w[j] != 0)
{
w[j + array[0]]++;
}
}
w[array[0]]++;

}

//显示函数,用于输出结果
void fun(int *array, int length)
{
fun1(array, length);
int num=0;
//输出重量的数量
for (int i = 0; i < 100; i++)
{
if (w[i] != 0)
num++;
}
cout << num;

// 输出每种重量的组合次数
for (int i = 0; i < 100; i++)
{
if (w[i] != 0)
cout << "," << "{" << i << "," << w[i] << "}";
}

}

int _tmain(int argc, _TCHAR* argv[])
{
int a[3] = { 1, 2,3 };
fun(a, 3);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归