[各种面试题] 打印和为给定数的所有形式

来源:互联网 发布:我的世界java内存 编辑:程序博客网 时间:2024/06/02 03:22

题目:

给定一个数N,打印所有和为N的分解形式:

如对于N=5:

1+1+1+1+1

1+1+1+2

等等。

 

还算比较好写的,但是第一次写了之后发现有重复的,比如对于N=3,会有1+2和2+1两种形式都出来了。

为了去掉重复的可能,递归到每一个子和的时候,只能从比前一个数大的那些数开始取。

代码:

 

#include<iostream>#include<iterator>#include<vector>#include<algorithm>using namespace std;int target;ostream_iterator<int> os(cout," ");void search(vector<int>& have, int sum){if ( sum==0){copy(have.begin(),have.end(),os);cout<<endl;return;}if ( sum < 0  ) return;int i=sum==target?1:have.back();for(;i<=sum;i++){have.push_back(i);search(have,sum-i);have.pop_back();}}int main(){while(1){cin>>target;if (target==0)break;vector<int> have;search(have,target);}}

原创粉丝点击