題目:
連續的正數序列,使得和爲指定值
分析:
以前做過類似的題目,求解兩個數字和爲指定值這種題目,採用先排序,然後從兩頭開始查找的方式,這題其實也差不多,採用兩個指針,不過這次兩個指針同時從頭開始查找,初始化時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;
}
總結:
學會用指針,尤其多個指針,可以解決很多有意思的問題。