解题思路:数组排序 然后通过差值找另一半
注意事项:
参考代码:
#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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复