剑指offer第41题 和为s的两个数
2015-08-13 16:50
211 查看
#include<iostream> using namespace std; bool sumk(int*list,int length,int*num1,int*num2,int k) { int have=false; if(list==NULL||length<=0||num1==NULL||num2==NULL) return have; *num1=0; *num2=0; int i=0; int j=length-1; while(i<j) { if(list[i]+list[j]==k) break; else if(list[i]+list[j]>k) j--; else if(list[i]+list[j]<k) i++; } if(list[i]+list[j]==k) { *num1=list[i]; *num2=list[j]; have=true; } return have; } int main() { int a[1000]; int c; int i=0; while(cin>>c) { a[i]=c; i++; if(cin.get()=='\n') break; } int k; cin>>k; int num1; int num2; if(sumk(a,i,&num1,&num2,k)) cout<<num1<<' '<<num2; else cout<<"meiyou"; }
#include<iostream> using namespace std; void print(int i,int j) { for(int k=i;k<=j;k++) { cout<<k<<' '; } cout<<endl; } void sumk(int k) { if(k<=2)return; int i=1; int j=2; int sum=3; while(i<=k/2) { if(sum==k) { print(i,j); sum-=i; i++; j++; sum+=j; } else if(sum<k) { j++; sum+=j; } else if(sum>k) { sum-=i; i++; } } } int main() { //int a[1000]; //int c; //int i=0; //while(cin>>c) //{ // a[i]=c; // i++; // if(cin.get()=='\n') // break; //} int k; cin>>k; int num1; int num2; sumk(k); }
相关文章推荐
- 【bzoj1015】【JSOI2008】【星球大战】【并查集+离线】
- 《JavaScript高级程序设计》读书笔记——ECMAscript5的数组迭代方法
- jQuery缓存数据——仿Map
- js自动刷新时间
- jquery暂停和中断循环
- JSTL标签库(转)
- html5 - drag 拖拽
- 用JS改变的元素CSS样式
- 使用gson-2.2.4.jar来处理json数据
- caffe学习笔记4-caffe安装需要注意的libraries
- JSP存放在 WEB-INF 跟webroot的区别
- Jmeter集成到Jenkins中展现html报告并发送邮件
- ajax 中关于URL路径及参数特殊字符问题
- js禁止右键功能,禁止复制
- javascript中 if(变量)和if(变量=true)的区别
- JS获取Select标签选中的值
- createjs初学-关于cache
- 结合jQuery的unload方法实现JS退出页面弹出对话框
- js substring和substr的区别实例,一目了然
- js获取各种浏览器宽度