解题思路:数组排序 然后通过差值找另一半
注意事项:
参考代码:
#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语言训练-求PI* (C语言代码)(正确结果竟然是谜一样的3.141591)浏览:1301 |
C二级辅导-公约公倍 (C语言代码)浏览:2122 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:569 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:542 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:584 |
川哥的吩咐 (C++代码)浏览:1016 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:435 |
九宫重排 (C++代码)浏览:2160 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:1448 |
多输入输出练习1 (C语言代码)浏览:1187 |