您的位置:首页 > Web前端

剑指Offer——连续序列的和值

2016-05-19 14:38 337 查看
//剑指Offer——打印连续正数序列
//输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)
#include <iostream>
#include <stdio.h>
using namespace std;

void PrintSequence(int small,int big);
void FindSequence(int s)
{
if(s<3) return;//输入检测

int small=1,big=2;
int mid=(1+s)/2;//1到s的中间值
int cursum=small+big;

while(small<mid)//至少有两个数字,增加small到(1+s)/2
{
if(cursum==s)
PrintSequence(small,big);
while(cursum>s&&small<mid)
{
//当前和值大于s时,去掉当前序列的较小值,即增大small
cursum-=small;
++small;

if(cursum==s)
PrintSequence(small,big);
}
//当前和值小于s时,增加big,以增加序列元素
++big;
cursum+=big;
}
}
//打印连续序列
void PrintSequence(int small,int big)
{
for(int i=small;i<=big;++i)
printf("%d ",i);
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: