您的位置:首页 > 职场人生

《编程之美》--只有加法的面试题

2009-09-17 21:59 239 查看

本题在《编程之美》没有给出答案,作者只是说此题比以前的题比较简单,今天到图书馆翻到,发现此题(难与不难暂且不说)还是挺有意思的。
以下是我的解决程序:
解决思路:
1. 先从start=1,end=2开始,如果start没有超过n的一半且end没有大于n,如果n大于sum(从start加到end的和)则将end增1,否则将start增1;
2. 重复1。
本题要求输出所有的结果,故而得到一种结果后,如果start没有超过n的一半且end没有大于n,则将start增1以后继续搜寻结果,直到不否和条件为止。

程序:
#include <iostream>
using namespace std;
void GetContinuousNum(int n)
{
int start = 1;
int end = 2;
int sum;
for(;(start < (n/2+1)) && end < n; )
{
//得到从start加到end的结果
sum = (end*end+end-(start-1)*(start-1)-(start-1))/2;
if(sum < n)
end ++;
else if(sum > n)
start ++;
else
{
//输出结果
for(int i = start; i < end+1; i ++)
cout << i << " ";
cout << endl;
start ++;
}
}
}
int main()
{
GetContinuousNum(6);
system("pause");
}

编程之美在本小节中还有两问,第二问的数的规律好像是2的幂次值,但想来想去还是没法用数学方法证明,可能是程序写多了,高中的那种做证明题的感觉已经不在了

,哪位过路人如有解答,请不吝赐教(第三问也是)~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: