您的位置:首页 > 其它

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

2012-09-17 10:59 141 查看
题目:

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

分析:

以前做过类似的题目,求解两个数字和为指定值这种题目,采用先排序,然后从两头开始查找的方式,这题其实也差不多,采用两个指针,不过这次两个指针同时从头开始查找,初始化时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;
}


总结:

学会用指针,尤其多个指针,可以解决很多有意思的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: