连续的正数序列,使得和为指定值

题目:

连续的正数序列,使得和为指定值

分析:

以前做过类似的题目,求解两个数字和为指定值这种题目,采用先排序,然后从两头开始查找的方式,这题其实也差不多,采用两个指针,不过这次两个指针同时从头开始查找,初始化时first指针指向1,second指针指向2,如果curr_sum小于指定的sum,second指针往后移东;相反,如果curr_sum大于指定的sum,first指针往后移动。

代码如下:

#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;

//输出序列
void printSequence(int small, int big)
{
	if(small > big)
		return ;

	for(int i = small; i <= big; i++)
		cout << i << " ";

	cout << endl;

	return ;
}

int main()
{
	int sum = 10001;
	int small = 1;
	int big = 2;
	int middle = (1 + sum) / 2;
	int curr_sum = small + big;
	while(small < middle)
	{
		if(curr_sum == sum)
			printSequence(small, big);
		else
		{
			while(curr_sum > sum && small < middle)		//一直循环,知道当前的和比sum小
			{
				curr_sum = curr_sum - small;
				small++;
				if(curr_sum == sum)
					printSequence(small, big);
			}
		}

		big++;
		curr_sum += big;
	}

	return 0;
}

总结:

学会用指针,尤其多个指针,可以解决很多有意思的问题。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章