首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

跟为n连续正数序列

2012-09-10 
和为n连续正数序列题目:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于123454567815,所以输

和为n连续正数序列

题目:输入一个正数n,输出所有和为n连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。

分析:这是网易的一道面试题。
这道题和本微软面试100题系列V0.1版的第14题有些类似。

我们可用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初始化为2。
如果从small到big的序列的和大于n的话,我们向右移动small,相当于从序列中去掉较小的数字。
如果从small到big的序列的和小于n的话,我们向右移动big,相当于向序列中添加big的下一个数字。
一直到small等于(1+n)/2,因为序列至少要有两个数字。

 

基于这个思路,我们可以写出如下代码:

 

// getSumOfN.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;void printf(int small,int big,int N){cout<<N<<" = ";for (int i=small;i<=big;i++){if (i!=big){cout<<i<<" + ";}if (i==big){cout<<i;}}cout<<endl;}void getSumOfN(int N){int small=1;int big=2;int mid=1+((N-1)>>1);int sum=small+big;while (small<mid){if (sum==N){printf(small,big,N);}while (sum>N){sum-=small;small++;if (sum==N){printf(small,big,N);}}big++;sum+=big;}}int _tmain(int argc, _TCHAR* argv[]){getSumOfN(15);system("pause");return 0;}


 

热点排行