题目描述:
输入一个正数sum,打印出所有和为s的连续正数序列;序列至少包括2个数;
例如sum = 9 = 2 + 3 + 4 = 4 + 5 , 则序列为[2 , 3 , 4] ,[4 , 5];
思路:
假设所求序列为:[small............big];small为最小值,big为最大值;
且small < (sum + 1) / 2的;
若CurrentSum == sum:直接打印满足的序列;
若CurrentSum > sum:则去掉当前最小值samll ,然后令small++(指向次最小值);
若CurrentSum < sum:则令big++, 然后CurrentSum += big;
代码实现:
#include<iostream>
#include<exception>
using namespace std;
//---------------------------------------------------------------和为s的连续正数序列---------------------------------------------------------------------
void FindSeuqence(int sum)
{
if(sum < 3)
return;
int small = 1;
int big = 2;
int middle = (sum + 1) / 2;
int CurSum = small + big;
while(small < middle)
{
if(CurSum == sum)
{
for(int i = small; i <= big; i++)
cout<<i<<'\t';
cout<<'\n';
}
while(CurSum > sum && small < middle)
{
CurSum -= small;
small++;
if(CurSum == sum)
{
for(int i = small; i <= big; i++)
cout<<i<<'\t';
cout<<'\n';
}
}
big++;
CurSum += big;
}
}