输出所有和为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