您的位置:首页 > 理论基础 > 数据结构算法

数据结构——算法之(018)( 和为n连续正数序列)

2014-05-25 21:04 232 查看
【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】

题目:

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

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

题目分析:
一、首先是连续的序列,则个数至少是2,假如输入的是15,则循环到中间就可以了,往后两个数字相机肯定会大于15
二、具体实现看代码,注释得很清楚了

算法实现:
#include <stdio.h>

void print(int start, int end)
{
printf(" [%d--%d]", start, end);
}

void get_continue_array(int n)
{
int start = 1;
int end = 2;
int mid = (n+1)/2; /*循环管的终点*/

int sum = start + end;
while(start < mid)
{
if(sum < n)
{
/*
** 和不够,尾部右移,并叠加到@sum中
*/
sum += ++end;
}
else if(sum > n)
{
/*
** 和超越了需要的值,说明@start和@end之间的序列
** 不可能构成需要的值舍去头部值,头部右移
*/
sum -= start++;
}
else
{
print(start, end);
sum -= start++;
}
}

}
int main(int argc, char *argv[])
{
int m = atoi(argv[1]);
get_continue_array(m);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: