Вопрос по задаче D "Три числа"
Как можно определить, существует ли в массиве из N целых чисел три числа, сумма которых равна нулю?
Формат входных данных
В первой строке входного файла указано одно целое число N (1 ≤ N ≤ 2000). Во второй строке находятся N целых чисел a1, a2, ..., aN ( - 1000 ≤ ai ≤ 1000) — элементы массива.
Формат выходных данных
В единственной строке выходного файла выведите одно слово «YES», если в этом массиве есть три числа, сумма которых равна нулю. В противном случае, выведите «NO».
Решите задачу на C++!
Информатика 11 класс Алгоритмы и структуры данных определение трех чисел сумма равна нулю задача D массив целых чисел алгоритм на C++ входные данные выходные данные программирование информатика 11 класс Новый
Для решения задачи о нахождении трех чисел в массиве, сумма которых равна нулю, можно использовать алгоритм с сортировкой и двумя указателями. Этот метод эффективен и позволяет проверить условие за время O(N^2). Давайте разберем шаги решения подробно.
Шаги решения:
Теперь давайте посмотрим на реализацию на C++:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int N; cin >> N; vector<int> a(N); for (int i = 0; i < N; i++) { cin >> a[i]; } sort(a.begin(), a.end()); for (int i = 0; i < N - 2; i++) { int left = i + 1; int right = N - 1; while (left < right) { int sum = a[i] + a[left] + a[right]; if (sum == 0) { cout << "YES" << endl; return 0; } else if (sum < 0) { left++; } else { right--; } } } cout << "NO" << endl; return 0; }
В этом коде мы сначала считываем размер массива и сами элементы. Затем сортируем массив и применяем метод с двумя указателями для поиска тройки чисел, сумма которых равна нулю. Если такая тройка найдена, программа выводит "YES", в противном случае — "NO".