您的位置:首页 > Web前端

剑指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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: