输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
#include<cstdio>
#include<vector>
using namespace std;
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
int start=1,end=2;
vector<vector<int> >arr;
if(sum<start+end) return arr;
int tmp=start+end;
while(start+end<sum||end-start==1)
{
// printf("start=%d\tend=%d\n",start,end);
if(tmp<=sum)
{
if(tmp==sum)
{
int i=start;
int j=end;
vector<int> vec;
while(i<=j)
{
vec.push_back(i++);
}
arr.push_back(vec);
}
end++;
tmp+=end;
}
else
{
tmp-=start;
start++;
}
}
return arr;
}
};
int main()
{
int n;
Solution so;
while(~scanf("%d",&n))
{
vector<vector<int> >arr=so.FindContinuousSequence(n);
for(int i=0;i<arr.size();i++)
{
for(int j=0;j<arr[i].size();j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/u010579068/article/details/49002241