现在的位置: 首页 > 综合 > 正文

第二十三题 求取和为n的连续的数

2018年04月13日 ⁄ 综合 ⁄ 共 590字 ⁄ 字号 评论关闭

题目:输入一个正数n,输出所有和为n连续正数序列。

例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-54-67-8

其中beg为开始的数,end为结束的数,当sum>n时候,需要减去小的beg,++beg

//求取和为定值的连续的数
#include <iostream>
using namespace std;
//输出beg和end之间的数
void printcount(int beg,int end)
{
	for (int i=beg;i<=end;++i)
	{
		cout<<i<<" ";
	}
	cout<<endl;
	return;
}
void FindContinuousSequence(int n)
{
	if (n<3)
	{
		return;
	}
	int beg=1;
	int end=2;
	int middle=(1+n)/2;
	int sum=beg+end;
	//beg的值一定比middle小
	while (beg<middle)
	{
		if (sum==n)
		{
			printcount(beg,end);
		}
		else
		{
			while (sum>n)
			{
				sum=sum-beg;
				++beg;
				if (sum==n)
				{
					printcount(beg,end);
				}
			}

		}	
		++end;
		sum=sum+end;
	}
}
int main()
{
	int a=0;
	cin>>a;
	FindContinuousSequence(a);
	return 0;
}

抱歉!评论已关闭.