输入一个正数n,输出所有和为n连续正数序列

来源:互联网 发布:无法访问移动网络 编辑:程序博客网 时间:2024/03/29 13:52

题目:输入一个正数n,输出所有和为n连续正数序列。 例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。 分析:这是网易的一道面试题。

自己编的代码,如下:

#include <iostream>using namespace std;bool isEven(int number){return (number % 2 == 0) ? true : false;}bool isOdd(int number){return (number % 2 != 0) ? true : false;}void isSequentialNumber(int number){int part = 0, partNum = 0, maxPart = number / 2;int i, j;for (i = 1; i < number; i++){part = 2*i;partNum = number / i;if ((number % i == 0) && isOdd(partNum) && i <= partNum / 2){for (j = 1; j <= part; j++){cout<<(partNum/2 - i + j)<<" ";}cout<<endl;}else if (i > partNum / 2){break;}}for (i = 3; i < number; i += 2){if ((number % i == 0) && (partNum = number / i) >= (i / 2 + 1)){for (j = 0; j < i; j++){cout<<(partNum - i / 2 + j)<<" ";}cout<<endl;}else if ((partNum = number / i) >= i / 2 + 1){break;}}}int main(){isSequentialNumber(150);}


 标准代码:

#include <iostream>using namespace std;void findSequentialNumber(int number){int start = 1, end = 1, sum = 0;int mid = number / 2;while (start <= mid){if (sum < number){sum += end++;}else if(sum > number){sum -= start++;}else{for (int i = start; i <= end; i++){cout<<i<<" ";}cout<<endl;sum -=start++;}}}int main(){findSequentialNumber(150);}