OpenJudge 1.11-07 :和为给定数

描述

给出若干个整数,询问其中是否有一对数的和等于给定的数。

输入

共三行:
第一行是整数n(0 < n <= 100,000),表示有n个整数。
第二行是n个整数。整数的范围是在0到10^8之间。
第三行是一个整数m(0 <= m <= 2^30),表示需要得到的和。

输出

若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,选择数对中较小的数更小的。若找不到符合要求的数对,输出一行No。

样例输入

4
2 5 1 4
6

样例输出

1 5

思路

很水的二分,sort排序,然后计算和,小左加,大右减,找到标记一下,找不到break输出No,上代码。

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
	int n,a[100005];
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	sort(a,a+n);
	int y;
	scanf("%d",&y);
	int l=0,r=n-1,b=0;
	while(l<r)
	{
		if(a[l]+a[r]<y)
		{
			l++;
		}
		else if(a[l]+a[r]==y)
		{
			printf("%d %d",a[l],a[r]);b=1;
			break;
		}
		else 
		{
			r--;
		}
	}
	if(b==0)
	{
		printf("No");
	}
	return 0;
}
发布了28 篇原创文章 · 获赞 40 · 访问量 3474

猜你喜欢

转载自blog.csdn.net/weixin_43912621/article/details/90421576