读书人

【100题】第五十一题 跟为n连续正数序

发布时间: 2012-08-27 21:21:56 作者: rapoo

【100题】第五十一题 和为n连续正数序列

一,题目

输入一个正数n,输出所有和为n连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。

二,思路

解法一:连续正序列,不包含n本身。所以子序列中最大元素为 n/2+1

求出到前 i个元素和保存到b数组中,然后遍历数组b ,i>j 时,求b[i] b[j] ==n。如果等于则输出 j+1 到 I 的序列。

时间复杂度:O(n^2)

#include <iostream>using namespace std;void PrintContinuousSequence(int small, int big){      for(int i = small; i <= big; ++ i)            printf("%d ", i);      printf("\n");}void FindContinuousSequence(int n){      if(n < 3)            return;                  int small = 1;       int big = 2;  //至少两个元素             int middle = (1 + n) / 2;      int sum = small + big;            while(small < middle)      {            if(sum == n)                  PrintContinuousSequence(small, big);            // if the current sum is greater than n,             // move small forward            while(sum > n)//元素偏大             {                  sum -= small;                  small ++;                  if(sum == n)                        PrintContinuousSequence(small, big);            }            // move big forward            big ++;            sum += big;      }}int main(){FindContinuousSequence(15);}



读书人网 >软件架构设计

热点推荐