常见编程题——数组中和为某一个值

来源:互联网 发布:php yaf导出excel表格 编辑:程序博客网 时间:2024/06/17 14:32

题目描述:给定一个有n个数字的数组,给出一个数字m,要求所有和等于m的组合。

思路:从头遍历,查找当前这个数在路径中时能不能和后面的数构成和,如果可以就输出这个路径,如果加上这个数比和sum大,说明不能有当前这个数,如果现在的和比sum小,就放入路径,继续查找。

在VS2010中的程序如下:

#include<iostream>#include<vector>#include <algorithm>using namespace std;void findpath(vector<int> a,vector<int> path,int n,int start,int sum){for(int i=start;i<n;i++){//从第一个数开始遍历sum-=a[i];path.push_back(i);if(sum==0){//说明找到了满足要求的一条路径for(int j=0;j<path.size();j++){cout<<a[path[j]]<<" ";}cout<<endl;path.clear();}else if(sum>0){//目前的和小于要求的和,要继续往后找findpath(a,path,n,i+1,sum);}sum+=a[i];//如果和大于了sum,说明当前这个数不能加入路径里if(path.size()>0)path.pop_back();}}int main(){int n;cin>>n;int temp;vector<int> data;for(int i=0;i<n;i++){cin>>temp;data.push_back(temp);}int sum;cin>>sum;vector<int> allpath;findpath(data,allpath,n,0,sum);cin.get();cin.get();return 0;}



阅读全文
0 0
原创粉丝点击