📅  最后修改于: 2023-12-03 15:07:34.959000             🧑  作者: Mango
这是一个来自国际空间研究组织(ISRO)在2017年5月所发布的问题。
给定一个列表和一个目标值,找到列表中两个不同的元素,它们的和等于目标值。你可以假设列表中没有重复的元素。
输入的第一行包含一个整数 $T$,表示测试用例的数量。 每个测试用例包含两行。 每个测试用例的第一行包含一个整数 $N$,表示列表中的元素数。 第二行包含 $N$个以空格分隔的整数,表示列表中的元素。 最后一行包含一个整数 $X$,表示目标值。
对于每个测试用例,如果找到两个不同的元素,它们的和等于目标值,则打印“是”,否则打印“否”。
t = int(input().strip())
for _ in range(t):
n = int(input().strip())
lst = list(map(int, input().strip().split()))
x = int(input().strip())
s = set(lst)
found = False
for val in lst:
if x-val in s and x-val != val:
found = True
break
print('Yes' if found else 'No')
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
while (t-- > 0) {
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; ++i) {
arr[i] = scanner.nextInt();
}
int x = scanner.nextInt();
Set<Integer> set = new HashSet<>();
boolean found = false;
for (int val : arr) {
if (set.contains(x-val) && x-val != val) {
found = true;
break;
} else {
set.add(val);
}
}
System.out.println(found ? "Yes" : "No");
}
}
}
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
int arr[n];
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
int x;
cin >> x;
unordered_set<int> s;
bool found = false;
for (int val : arr) {
if (s.count(x-val) > 0 && x-val != val) {
found = true;
break;
} else {
s.insert(val);
}
}
if (found) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}
以上是三种不同语言的实现,详细注释请见代码。