递归全组合问题
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种重量,括号中第一个数表示重量,第二个数表示组合方式数量。
输入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; }
相关文章推荐
- 递归求解几类排列组合问题(二、全组合排列)
- 递归问题之一:给定一字符串,输出字符串中所有字符子串的各种组合形式,长度为一个字符到字符串的长度,忽略排序
- 递归实现组合问题
- 递归-计算排列组合问题
- 递归求解几类排列组合问题(三、非重复组合排列)
- 蓝桥杯C语言培训3 典型问题的递归框架 例题6 代表团出访(组合枚举)
- 组合问题的递归实现
- 递归求解几类排列组合问题(四、普通选择性组合排列)
- 回溯法解决组合与数的问题(递归与非递归算法)
- 打印组合数问题之递归版回溯算法
- 递归实现排列组合问题
- 非递归解决组合问题
- 非递归解决组合问题
- 非递归解决组合问题
- 用递归写排列组合问题
- C++递归问题之三---0-1背包问题:给定两个值value和num,在1到num之间取值使这些数和为value,输出所有组合
- 递归求解几类排列组合问题(四、普通选择性组合排列)
- 字符串的全排列和组合递归非递归--排列组合扩展问题
- 典型的递归问题:把一个数组里的组合全部列出,例如1 2,列出为1,2,12,21
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环