解题思路:数组排序 然后通过差值找另一半
注意事项:
参考代码:
#include<bits/stdc++.h>
using namespace std;
long long a[100006];
//下面就是二分查找模板了
long long f1(long long a[],long long l,long long r,long long k)
{
while(l <= r)
{
long long mid = (l+r)/2;
if(a[mid] == k) return mid;
else if(a[mid] < k)
l = mid+1;
else if(a[mid] > k)
r = mid-1;
}
return -1;
}
int main()
{
long long n,i,j,l,r,k,num = 0,flag = 0,flag1;
cin >> n;
for(i = 0 ; i < n;i++)
cin >> a[i];
cin >> k;
for(i = 0 ; i < n;i++)
{
if(a[i] > k)//这个判断输入的数如果大于要找的值肯定不行 记录数量
num++;
}
sort(a,a+n);//从小到大排序
l = 0,r = n -num;//把后面大于的直接仍了
j = r;
for(i = 0 ; i < j ;i++)//从小到大遍历
{
long long sl = k - a[i];//这个为需要找的另一半
flag = f1(a,0,r-1,sl);//判断是否找到
if(flag != -1)//找到了
{
flag1 = 1;//标记
cout << a[i] << ' ' << a[flag];//输出
break;//结束
}
}
if(flag1 != 1)//看是否找到
cout << "No";
return 0;
}
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:585 |
演讲大赛评分 (C语言代码)浏览:1696 |
第三届阿里中间件性能挑战赛-总决赛亚军比赛攻略浏览:1170 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1029 |
A+B for Input-Output Practice (II) (C语言代码)浏览:622 |
C二级辅导-等差数列 (C语言代码)浏览:831 |
C语言训练-斐波纳契数列 (C语言代码)浏览:540 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:801 |
求圆的面积 (C++代码)浮点数有误差!!!浏览:724 |
母牛的故事 (java语言代码)浏览:896 |