【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱: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;
}