您的位置:首页 > 职场人生

【网易面试题】和为n的连续正数序列

2012-06-01 08:32 351 查看
用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初始化为2,如果从small到big的序列的和大于n的话,向右移动small,相当于从序列中去掉较小的数字。如果从small到big的序列和小于n的话,向右移动big,相当于向序列中添加big的下一个数字,一直到small等于(1+n)/2,因为序列至少要有两个数字。

#include <iostream>
using namespace std;

void PrintContinuousSequence(int small, int big)
{
for(int i=small; i<=big; i++)
cout<<i<<" ";
cout<<endl;

}
void FindContinuousSequence(int n)
{
if(n<3)
return;
int small=1;
int big=2;
int middle=(n+1)/2;
int sum=small+big;

while(small < middle)
{
if(sum==n)
PrintContinuousSequence(small, big);
while(sum>n)
{
sum-=small;
small++;
if(sum==n)
PrintContinuousSequence(small, big);
}

big++;
sum+=big;
}

}

void main()
{
int n;
cout<<"请输入n:";
cin>>n;
FindContinuousSequence(n);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: