4个数和为0

给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No"。
Input
第1行,1个数N,N为数组的长度(4 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
如果可以选出4个数,使得他们的和为0,则输出"Yes",否则输出"No"。
Input示例
5
-1
1
-5
2
4
Output示例

Yes

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1000 + 10;
typedef long long ll;
ll arr[maxn];
ll CD[maxn*maxn];
int main() {
	int n;
	while (~scanf("%d", &n)) {
		for (int i = 0; i < n; i++) {
			scanf("%lld", &arr[i]);
		}
		sort(arr, arr+n);
		int flag = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				ll tmp = -(arr[i] + arr[j]);
				int l = j+1, r = n-1;
				while (l < r) {
					if (arr[l] + arr[r] == tmp) {
						flag = 1;
						break;
					}
					else if (arr[l] + arr[r] < tmp) {
						l++;
					} else {
						r--;
					}
				}
			}
		}
		if (flag == 1) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_34649947/article/details/79860274