题目:输入一个正数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);
}