本文主要是介绍打印结果为S的连续序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题:输入一个正数S,打印出所有和为S的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印的结果为三个连续的序列1-5,4-6和7-8.
算法的过程如下:
详细的代码如下:
//打印出连续的序列
void PrintContinuousSequence(int small, int big);void FindContinuousSequence(int sum)
{if(sum < 3)return;int small = 1; int big = 2;int middle = (1 + sum) / 2;int curSum = small + big;while(small < middle){if(curSum == sum)PrintContinuousSequence(small, big);while(curSum > sum && small < middle){curSum -= small;small ++;if(curSum == sum)PrintContinuousSequence(small, big);}big ++;curSum += big;}
}void PrintContinuousSequence(int small, int big)
{for(int i = small; i <= big; ++ i)printf("%d ", i);printf("\n");
}// ====================测试代码====================
void Test(char* testName, int sum)
{if(testName != NULL)printf("%s for %d begins: \n", testName, sum);FindContinuousSequence(sum);
}int _tmain(int argc, _TCHAR* argv[])
{Test("test1", 1);Test("test2", 3);Test("test3", 4);Test("test4", 9);Test("test5", 15);Test("test6", 100);return 0;
}
这篇关于打印结果为S的连续序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!