c++数组中任意个数相加等于定数
时间: 2023-11-03 07:01:07 浏览: 260
这个问题可以使用回溯法(backtracking)来解决。具体步骤如下:
1. 定义一个函数,该函数接受四个参数:数组、目标值、当前和、当前索引。
2. 在函数中,使用循环遍历数组,从当前索引开始,依次选择每个元素进行加法运算,计算出当前和。如果当前和等于目标值,则将当前结果存储在结果集中,并返回。
3. 如果当前和小于目标值,则继续递归调用函数,将当前索引加一,并将当前和传入下一层递归函数。
4. 如果当前和大于目标值,则不再继续递归调用函数。
5. 在主函数中调用上述函数,并打印出结果集中的所有结果。
参考代码如下:
```c++
#include <iostream>
#include <vector>
using namespace std;
void backtracking(vector<int>& nums, int target, int sum, int index, vector<vector<int>>& res, vector<int>& cur) {
if (sum == target) {
res.push_back(cur);
return;
}
for (int i = index; i < nums.size(); i++) {
if (sum + nums[i] > target) {
continue;
}
cur.push_back(nums[i]);
backtracking(nums, target, sum + nums[i], i + 1, res, cur);
cur.pop_back();
}
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5};
int target = 7;
vector<vector<int>> res;
vector<int> cur;
backtracking(nums, target, 0, 0, res, cur);
for (auto& r : res) {
for (auto& n : r) {
cout << n << " ";
}
cout << endl;
}
return 0;
}
```
在上述代码中,我们将结果存储在了一个二维数组 res 中,每个一维数组表示一个符合条件的结果。在主函数中,我们打印出了所有的结果。
阅读全文