和为n连续正数序列

来源:互联网 发布:vmware mac os 下载 编辑:程序博客网 时间:2024/04/30 11:16

题目:输入一个正数n,输出所有和为n连续正数序列。

例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-54-67-8

我们从头开始找,初始化时连续序列是1-2,同时记录sum=3,

如果连续序列和小于n,那么就把连续序列区间的终点向后移,更新sum;

如果连续序列的和大于n,那么就把连续序列区间的起点向后移,更新sum;

如果连续序列的和等于n,那么就输出这个连续序列,同时区间起点和终点同时向后移,更新sum,找下一个区间。

区间起点若超过n的一半,那么就不需要再找了。

void FindContinuousSequence(int n){int start,end,mid,sum;mid = (n >> 1);start = 1;end = 2;sum = 3;while (start <= mid){if (sum < n) sum += ++end; // move end forward and update the sum.else if (sum > n) sum -= start++; // move start forward and update the sum.else{// print the start and end of continuous sequence.printf("%d-%d\n", start, end); // move start forward, move end forward and update the sum.sum -= start++; sum += ++end;}}return;}