#include <iostream> #include <list> using namespace std; void find_seq(int sum, int index, int * value, list<int> & seq) { if(sum <= 0 || index < 0) return; if(sum == value[index]) { printf("%d ", value[index]); for(list<int>::iterator iter = seq.begin(); iter != seq.end(); ++iter) { printf("%d ", *iter); } printf("\n"); } seq.push_back(value[index]); find_seq(sum-value[index], index-1, value, seq); //放value[index] seq.pop_back(); find_seq(sum, index-1, value, seq); //不放value[index] } int main() { int M; list<int> seq; int value[] = {2,9,5,7,4,11,10}; int N = sizeof(value)/sizeof(value[0]); for(int i = 0; i < N; ++i) { printf("%d ",value[i]); } printf("\n"); scanf("%d", &M); printf("可能的序列:\n"); find_seq(M, N-1, value, seq); return 0; }
从给定的N个正数中选取若干个数之和为M
最新推荐文章于 2021-02-16 14:44:35 发布
本文介绍了一个使用C++实现的递归算法,该算法用于找出所有可能的整数序列之和等于给定目标值M的组合。通过遍历整数数组并采用回溯策略,展示了一种有效的方法来枚举这些序列。
1336

被折叠的 条评论
为什么被折叠?



