和为 S 的连续正数序列
题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出 9~16 的和,他马上就写出了正确答案是 100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为 100 (至少包括两个数)。没多久,他就得到另一组连续正数和为 100 的序列: 18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为 S 的连续正数序列? Good Luck!
输出描述:输出所有和为 S 的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。
分析:
输入 sum = 20 (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
1. 定义两个指针,左指针从 1 开始,右指针从 2 开始;
2. 求和 1 + 2 = 3;
3. 循环开始;
4. 如果判断 3 小于 20,右指针++,2 变为 3,求和 3 + 3 = 6,循环一直到右指针 = 6,和为21;
4. else if 判断 21 大于 20,和减去左指针值,和为 21 - 1 = 20,左指针++,1 变为 2;
5. else 和与输入一样,存数;【再把右指针++,求和,再求剩余组合】
6. 循环结束。
PS:与牛客相同!
代码:
