求正整数n所有可能的和式的组合
来源:互联网 发布:淘宝网首页女装秋装 编辑:程序博客网 时间:2024/05/16 14:47
求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)
首先说一下,群里面很多人在问这个东东怎么去打印,当然如果是只求组合个数的话,他就是一个完全背包的问题,如果要打印的话,那还真的费一番功夫。
我们可以将这题想为一个找零钱问题,以前找零钱问题是,我们有1元、2元、5元、10元面值的纸币,现在我有20元钱,问有多少种找法。
这个找零钱如果将面值扩展为1元、2元、3元....20元,那么就刚好是我们这道题了。
请看我另一篇blog《找零钱递归》
我直接贴代码如下:
#include <iostream>#include <string.h>using namespace std;#define MAX_VALUE10int next[MAX_VALUE] = {0};void SegNum(int nSum, int* pData, int nDepth){if(nSum < 0)return;if(nSum == 0){for(int j = 0; j < nDepth; j++)cout << pData[j] << " ";cout << endl;return;}int i = (nDepth == 0 ? next[0] : pData[nDepth-1]);for(; i <= nSum;){pData[nDepth++] = i;SegNum(nSum-i,pData,nDepth);nDepth--;i = next[i];}}void ShowResult(int array[],int nLen){next[0] = array[0];int i = 0;for(; i < nLen-1; i++)next[array[i]] = array[i+1];next[array[i]] = array[i]+1;int* pData = new int [MAX_VALUE];SegNum(MAX_VALUE,pData,0);delete [] pData;}测试代码如下:
int main(){int* array = new int[MAX_VALUE];for(int i = 0; i < MAX_VALUE; i++){array[i] = i+1;}//找零钱测试ShowResult(array,MAX_VALUE);system("pause");return 0;}测试结果如下:
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合。
- 求正整数n所有可能的和式的组合
- 求正整数 n 所有可能的和式的组合
- 正整数n的所有可能和式的组合
- JAVA:递归实现输出正整数和等于n的所有不增的正整数和式
- 用递归方法 实现 输出正整数和等于n的所有正整数和式
- 对于正整数N,输出其和等于N且满足以下限制条件的所有正整数的和式
- 求正整数n以内的所有素数
- 求小于正整数N的所有质数
- 给定一个正整数,求其分解成3个正整数的所有可能组合数
- n个布尔变量,打印所有可能的真值组合
- C++ 特性 面试
- TEKLA.STRUCTURES.V18.1-MAGNiTUDE
- Capture.Net.Professional.v11.8.4652.Incl.Keymaker-CORE
- Learning C++ Resources as Reference
- 信号量在linux0.11下的实现及其在生产者,消费者应用中的体现
- 求正整数n所有可能的和式的组合
- 找零钱递归实现
- Centos版FileZilla FTP
- 一个无重复面值的找零算法的思路与实现
- SQL语句
- 转换字符串格式为原来字符串里的字符加上该字符连续出现的个数
- 将一句话里的单词进行倒置
- 模拟一个C++的函数strstr()函数:该函数的返回值是主串中字符串子串的位置以后的所有字符
- 输入一行子串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置