OpenJudge 1.11-07 :和为给定数

    xiaoxiao2021-04-18  166

    描述

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

    输入

    共三行: 第一行是整数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; }

    最新回复(0)