这里用到一个等差数列公式:
Sum=(small+big)n/2;
所有和为s的连续正数序列:
vector<vector<int> > FindContinuousSequence(int sum)
{
vector<int> v;
vector<vector<int> > vv;
if (sum < 3) return vv;
int small = 1;
int big = 2;
int n = 2;
while (small<(sum+1)/2) //注意结束条件 因为必须起码俩数,最小的要是大于和的一半了,再往后也没啥用
{
if((small + big)*n / 2 < sum)
{
n++;
big++;
}
else if ((small + big)*n / 2 > sum)
{
n--;
small++;
}
else
{
for (int i = small; i <= big;i++)
{
v.push_back(i);
}
vv.push_back(v);
v.clear();
big++;
n++;
}
}
return vv;
}
递增数列中和为s的两个数字:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> v;
if (sum <=0) return v;
int small = 0;
int big = array.size()-1;
while (small<big)
{
if (array[small] + array[big]<sum)
{
small++;
}
else if (array[small] + array[big] > sum)
{
big--;
}
else
{
v.push_back(array[small]);
v.push_back(array[big]);
break;
}
}
return v;
}