和为n连续正数序列

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

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

对于这个题目可以采用两个变量表示下标然后移动的方法,一个表示序列的开头,一个表示序列的结尾。当开头大于n的一半时终止移动。

代码如下:

//和为n连续正数序列
#include<iostream>
using namespace std;
void print_sq(int start,int end){       //打印序列
	for(int i=start;i<=end;i++)
		cout<<i<<" ";
	cout<<endl;
}
void find_the_sq(int num){
	int start=1,end=2,mid=num/2;
	int sum=(start+end);
	while(start<=mid){                //检索,若是sum大了,则start右移,若是小了则end右移
		if(sum<num)
			sum+=++end;
		else if(sum>num)
			sum-=start++;
		else{
			print_sq(start,end);
			sum-=start++;
		}
	}
}
int main(void){
	find_the_sq(25);
	return 0;
}
posted @ 2011-03-07 13:45  akawhy  阅读(1272)  评论(0编辑  收藏  举报