
Написать на C++:даны два массива. Определить существуют ли в первом массиве такие два элемента, что
их сумма равна сумме каких-либо трёх элементов второго массива

Ответы на вопрос

#include <iostream>
#include <vector>
/*
Определить существуют ли в первом массиве такие два элемента,
что их сумма равна сумме каких-либо трёх элементов второго массива
*/
#define DEBUG // для себя.
int main()
{
int
size1,
size2;
std::cout << "Введите размер 1-го массива(вектора): " << std::endl;
std::cin >> size1;
std::cout << "Введите размер 2-го массива(вектора): " << std::endl;
std::cin >> size2;
int* arr1 = new int[size1];
int* arr2 = new int[size2];
for(int i = 0; i < size1; i++)//инициализируем значения первого массива с клавиатуры
std::cin >> arr1[i];
for(int i = 0; i < size2; i++)//инициализируем значения второго массива с клавиатуры
std::cin >> arr2[i];
int
sum1(0),//сумма двух элементов 1го массива
sum2(0);//сумма двух элементов 2-го массива
for(int i = 0; i < size1; i++)
{
for(int j = 1; j < size2-1; j++)
{
if(i == j) continue;
sum1 = arr1[i] + arr1[j];
for(int ii = 0; ii < size2; ii++)
{
for(int jj = 0; jj < size2; jj++)
{
for(int ff = 0; ff < size2; ff++)
{
if(ii == jj || jj == ff || ii == ff) continue;
sum2 = arr2[ii] + arr2[jj] + arr2[ff];
if(sum1 == sum2)
{
std::cout << "Существует." << std::endl;
#if defined DEBUG
std::cout << arr1[i] << " " << arr1[j] << std::endl;
std::cout << arr2[ii] << " " << arr2[jj] << " " << arr2[ff] << std::endl;
#endif
delete[] arr1;
delete[] arr2;
return 0;
}
}
}
}
}
}
std::cout << "Не существует." << std::endl;
delete[] arr1;
delete[] arr2;
return 0;
}



Вот пример кода на C++, который решает вашу задачу:
cpp#include <iostream>
#include <unordered_set>
bool checkArrays(int arr1[], int arr2[], int size1, int size2) {
std::unordered_set<int> set2;
// Заполняем хэш-таблицу значениями из второго массива
for (int i = 0; i < size2; i++) {
set2.insert(arr2[i]);
}
// Проверяем все возможные комбинации из первого массива
for (int i = 0; i < size1 - 1; i++) {
for (int j = i + 1; j < size1; j++) {
int sum = arr1[i] + arr1[j];
// Проверяем, есть ли в хэш-таблице такая сумма
if (set2.find(sum) != set2.end()) {
return true;
}
}
}
return false;
}
int main() {
const int size1 = 5;
const int size2 = 7;
int arr1[size1] = {1, 2, 3, 4, 5};
int arr2[size2] = {7, 8, 9, 10, 11, 12, 13};
bool result = checkArrays(arr1, arr2, size1, size2);
if (result) {
std::cout << "Существуют такие два элемента в первом массиве, "
"что их сумма равна сумме каких-либо трёх элементов второго массива.\n";
} else {
std::cout << "Таких двух элементов в первом массиве нет, "
"чтобы их сумма была равна сумме каких-либо трёх элементов второго массива.\n";
}
return 0;
}
В этом примере мы используем хэш-таблицу (std::unordered_set
) для хранения значений из второго массива. Затем мы перебираем все возможные комбинации пар элементов из первого массива и проверяем, есть ли их сумма в хэш-таблице. Если есть хотя бы одна сумма, то возвращаем true
, иначе возвращаем false
. В главной функции main
приведен пример использования этой функции для заданных массивов arr1
и arr2
.


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili