連續的正數序列,使得和爲指定值

題目:

連續的正數序列,使得和爲指定值

分析:

以前做過類似的題目,求解兩個數字和爲指定值這種題目,採用先排序,然後從兩頭開始查找的方式,這題其實也差不多,採用兩個指針,不過這次兩個指針同時從頭開始查找,初始化時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;
}

總結:

學會用指針,尤其多個指針,可以解決很多有意思的問題。



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