剑指offer——面试题:42(二)s的连续正数序列
2015-09-04 20:15
471 查看
题目:
输入一个正数s,打印出所有和为s的连续正数序列(至少包含两个数)。例如输入9,则由2,3,4和4,5序列
思路。同样是两个指针的方法,设置初始时small=1,big=2
small和big之间的序列和为nowsum=3
当nowsum<s时。将big++,改变nowsum
当nowsum>s时,将small++,改变nowsum
当nowsum==s时,就是所求的值,然后将big++
终止条件为small==big时
输入一个正数s,打印出所有和为s的连续正数序列(至少包含两个数)。例如输入9,则由2,3,4和4,5序列
思路。同样是两个指针的方法,设置初始时small=1,big=2
small和big之间的序列和为nowsum=3
当nowsum<s时。将big++,改变nowsum
当nowsum>s时,将small++,改变nowsum
当nowsum==s时,就是所求的值,然后将big++
终止条件为small==big时
#include<iostream> #include<vector> using namespace std; void jishu(int sum,vector<vector<int>>& vec) { vec.clear(); if(sum<=2) return; vector<int> vec0; int small=1; int big=2; int nowsum=3; while(small!=big) { if(nowsum==sum) { vec0.clear(); for(int i=small;i<=big;i++) vec0.push_back(i); vec.push_back(vec0); big++; nowsum=nowsum+big; } else if(nowsum>sum) { nowsum-=small; small++; } else { big++; nowsum+=big; } } } int main() { int sum=15; vector<vector<int>> vec; jishu(sum,vec); for(int i=0;i<vec.size();i++) { for(int j=0;j<vec[i].size();j++) cout<<vec[i][j]<<' '; cout<<endl; } system("pause"); }
相关文章推荐
- 《剑指Offer》面试题:反转链表
- 剑指offer——面试题41:(一)和为s的两个数字
- Hibernate学习之面试问题汇总
- 腾讯面试(一)
- 腾讯面试(二)
- 一位39岁程序员的困惑:知道得越多编程越慢怎么办?
- 程序员的回归式进化
- 黑马程序员—————Java基础--------多线程
- 程序员的人生规划
- 面试热问——你的职业规划是什么?
- 推荐!国外程序员整理的机器学习资源大全
- 黑马程序员java之IO_2
- 黑马程序员java之IO_1
- 黑马程序员java之集合框架Map
- 黑马程序员java之集合框架Collection
- 黑马程序员--OC封装
- 黑马程序员Java之常用API
- 面试中常考的指针问题
- 程序员养成记
- 黑马程序员java之多态和异常