/**************************************************************** 输入一个正数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; }
原文:http://blog.csdn.net/walkerkalr/article/details/21476965