剑指Offer----面试题41(2):和为s的连续正数序列

来源:互联网 发布:java web文件服务器 编辑:程序博客网 时间:2024/05/21 10:58

题目:


输入一个整数s,打印所有和为s的连续正数序列(至少含有两个数)。例如输入15, 由于1+2+3+4+5 = 4+5+6 = 7+8 = 15,所以打印出3个连续序列。

分析




源码

#include<iostream>using namespace std;void print(int small, int big, int sum){for (int i = small; i < big; ++i)cout << i << " + ";cout << big << " = " << sum << endl;}void Function(int sum){cout << "===============sum = " << sum << "=================" << endl;if (sum <= 2){cout << "输入的数值不符合要求" << endl;return;}int small = 1;int big = 2;int currentSum = small + big;int middle = (sum + 1) / 2;while (small < middle && big < sum){if (currentSum == sum){print(small, big, sum);}while (currentSum > sum && small < middle){currentSum -= small;++small;if (currentSum == sum)print(small, big, sum);}++big;currentSum += big;}cout << endl;}int main(){Function(1);Function(2);Function(5);Function(10);Function(15);Function(100);system("pause");return 0;}

运行结果:
===============sum = 1=================输入的数值不符合要求===============sum = 2=================输入的数值不符合要求===============sum = 5=================2 + 3 = 5===============sum = 10=================1 + 2 + 3 + 4 = 10===============sum = 15=================1 + 2 + 3 + 4 + 5 = 154 + 5 + 6 = 157 + 8 = 15===============sum = 100=================9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 = 10018 + 19 + 20 + 21 + 22 = 100请按任意键继续. . .



0 0
原创粉丝点击