解题思路:数组排序 然后通过差值找另一半
注意事项:
参考代码:
#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语言代码)浏览:524 |
母牛的故事 (C语言代码)浏览:549 |
Cylinder (C语言描述+详细分析)浏览:3262 |
1014题解浏览:484 |
大家好,我是验题君浏览:576 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:1909 |
DNA (C语言代码)浏览:390 |
判定字符位置 (C语言代码)浏览:792 |
简单的a+b (C语言代码)浏览:628 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:713 |