和为 n 的连续正整数序列

来源:互联网 发布:淘宝怎样才能排名靠前 编辑:程序博客网 时间:2024/05/17 04:03


1. 描述

输入一个正整数n,输出所有和为n的连续正整数序列。

例如输入15,输出4个序列:1 2 3 4 5,4 5 6, 7 8, 15

据说这是一道网易的面试题。


2. 思路

用start和end分别表示序列的起始和结束,sum为从start到end序列的和。end的值不大于(n+1)/2。开始时令sum = start = end = 0,判断sum的值是否等于n:

(1) 如果等于n,则打印从start到end之间的序列,并令sum += ++end;

(2) 如果sum 小于n,则令sum += ++end;

(3) 此时sum大于n,令sum -= start++;


代码如下:

void continuousSeqSum(int n){if (n <= 0)return ;int sum, start, end, i;sum = start = end = 1;while (end <= (n + 1) >> 1){if (sum == n){for (i = start; i <= end; i++) //打印结果printf("%d ", i);printf("\n");sum += ++end;              } else if (sum < n){sum += ++end;} else {sum -= start++;}} //whileif (n > 1)printf("%d\n", n);}

测试如下:

#include <stdio.h>void continuousSeqSum(int n);int main(void){int n;printf("input n: ");scanf("%d", &n);continuousSeqSum(n);return 0;}

输出: