/****************************************************************
输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列
1~5,4~6和7~8。
****************************************************************/
/*
解题思路:以和为9为例
过程:
12
123
1234
234 符合
2345
345
45 符合
4<(9+1)/2 结束查找
*/
#include<stdio.h>
void printContinueSequence(int small,int big);
void findContinueSequence(int sum)
{
if(sum<3)
return;
int small = 1;
int big = 2;
int middle = (sum+1)/2;
int curSum = small + big;
while(small < middle)
{
if(curSum == sum)
{
printContinueSequence(small,big);
++big;
curSum += big;
}
else if(curSum < sum)
{
++big;
curSum += big;
}
else
{
curSum -= small;
++small;
}
}
}
void printContinueSequence(int small,int big)
{
for(int i=small; i<=big; ++i)
{
printf("%d\t",i);
}
printf("\n");
}
int main()
{
findContinueSequence(9);
return 0;
}
和为s的连续正数序列
最新推荐文章于 2020-03-15 11:41:38 发布