和为S的连续正数序列

来源:互联网 发布:离散傅里叶矩阵 编辑:程序博客网 时间:2024/05/01 20:54

题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 

输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

感想:这题我之前的想法是用sum除以i=sqrt(sum),……1;以商为中心两边扩展。但是被自己写的逻辑绕晕了,参考了一下剑指的写法。简单多了。但是时间复杂度不小。

//和为S的连续正数序列#include <iostream>#include <vector>using namespace std;int count(int small,int big){int sum=0;while(small<=big){sum+=small;small++;}return sum;}vector<vector<int> > FindContinuousSequence(int sum) {  vector<vector<int>> v2d;  vector<int> v;if(sum==0)  return v2d;int small=1,big=2;while(small<=(1+sum)/2){int sum_temp=count(small,big);if(sum_temp<sum)big++;else if(sum_temp>sum)small++;else{for(int i=small;i<=big;i++)v.push_back(i);v2d.push_back(v);v.clear();big++;}}return v2d;}void main(){vector<vector<int>> v2d;v2d=FindContinuousSequence(2);for(int i=0;i<v2d.size();i++){for(int j=0;j<v2d[i].size();j++)cout<<v2d[i][j]<<' ';cout<<endl;}system("pause");}


0 0
原创粉丝点击