/*
[和为S的连续正数序列]
[题目]
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。
但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。
没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。
现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输入描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。
[解析]
双向指针的应用。特别要注意边界条件!!!
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution{
public:
vector<vector<int> > FindContinuousSequence(int sum){
vector<vector<int> > ans;
if(sum < 3)
return ans;
int islow = 1;
int ifast = 2;
int curSum = islow + ifast;
while(islow < ifast){
if(curSum<sum){
ifast++;
curSum += ifast;
}
if(curSum == sum && islow+1<=ifast){
vector<int> temp;
for(int i=islow; i<=ifast; i++)
temp.push_back(i);
ans.push_back(temp);
// note: there mush be add a new value to extend the result.
curSum -= islow;
islow++;
}
if(curSum > sum){
curSum -= islow;
islow++;
}
}
return ans;
}
};
int main()
{
vector<vector<int> > ans = Solution().FindContinuousSequence(3);
for(int i=0; i<ans.size(); i++){
for(int j=0; j<ans[i].size(); j++){
cout << ans[i][j] << " ";
}
cout << endl;
}
return 0;
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15267.html