跟为S的连续正数序列(剑指offer) 两个个指针的应用
和为S的连续正数序列(剑指offer) 两个个指针的应用
和为S的连续正数序列
- 参与人数:1005时间限制:1秒空间限制:32768K
- 通过比例:26.06%
- 最佳记录:0 ms|0K(来自 平方宁)
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
链接:http://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
#include<cstdio> #include<vector> using namespace std; class Solution { public: vector<vector<int> > FindContinuousSequence(int sum) { int start=1,end=2; vector<vector<int> >arr; if(sum<start+end) return arr; int tmp=start+end; while(start+end<sum||end-start==1) { // printf("start=%d\tend=%d\n",start,end); if(tmp<=sum) { if(tmp==sum) { int i=start; int j=end; vector<int> vec; while(i<=j) { vec.push_back(i++); } arr.push_back(vec); } end++; tmp+=end; } else { tmp-=start; start++; } } return arr; } }; int main() { int n; Solution so; while(~scanf("%d",&n)) { vector<vector<int> >arr=so.FindContinuousSequence(n); for(int i=0;i<arr.size();i++) { for(int j=0;j<arr[i].size();j++) { printf("%d ",arr[i][j]); } printf("\n"); } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 1楼scgg48484昨天 19:29
- 学习了!