输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8
具体代码如下:
#include "stdafx.h"
#include<list>
#include<iostream>
using namespace std;
//函数功能 : 打印满足条件的连续序列
//函数参数 : begin为开始,end为结束,左闭右开区间
//返回值 : 无
void PrintSequence(unsigned begin, unsigned end)
{
for(unsigned i = begin; i < end; i++)
cout<<i<<' ';
cout<<endl;
}
//函数功能 : 输出所有和为n连续正数序列
//函数参数 : n为整数
//返回值 : 无
void FindTargetSequence(unsigned n)
{
if(n < 3) //必须是2个连续数之和,n必须大于等于3
return ;
unsigned low = 1;
unsigned high = 2;
unsigned middle = n / 2;
unsigned sum = 1;
while(low <= middle) //只需考虑一半元素即可
{
if(sum == n) //满足条件
PrintSequence(low, high);
if(sum < n) //不够,说明还需要再加
{
sum += high;
high++;
}
else //够了,说明要减一点
{
sum -= low;
low++;
}
}
}
int main()
{
/*int sum, n;
cout << "请输入你要等于多少的数值sum:" << endl;
cin >> sum;
cout << "请输入你要从1.....n数列中取值的n:" << endl;
cin >> n;
cout << "所有可能的序列,如下:" << endl;
find_factor(sum,n); */
FindTargetSequence(15);
system("pause");
return 0;
}