Как в C++ разделить массив на все элементы?
Дан массив целых чисел и целое число S. Необходимо найти все уникальные пары чисел в массиве, которые в сумме дают S. Каждая пара должна быть представлена в виде кортежа, и порядок не должен иметь значения. Необходимо вывести все такие пары
Вот мое решение:
srand(time(NULL));
int number = 11;
int count = 0;
const int SIZE = 10;
int arr[SIZE];
for (int i = 0; i < SIZE; i++)
{
arr[i] = rand() % 17;
}
for (int i = 0; i < SIZE; i++)
{
for (int j = i + 1; j < SIZE; j++)
{
if (arr[i] + arr[j] == number)
{
count += 1;
}
}
}
cout << count << endl;
}
Оно правильное? Просто если будут 2 числа сумма которых дает 11, но первое будет в начале, а второе в конце, то их не посчитают. Я думаю можно разделить массив на все элементы и каждый элемент складывать со всеми остальными, проверяя условие. Но как это сделать?
Ответы (2 шт):
Автор решения: SurfaceStack
→ Ссылка
Правильней и быстрее будет решение с двумя указателями:
- Сначала сортируем массив в порядке возрастания/убывания
- Одним указателем идем с конца, другим - с начала
- Складываем число
a
и числоb
- если сумма не равна искомому, то переходим дальше. Если сумма равна искомому числу - выводим пару.
Автор решения: Никита Самоуков
→ Ссылка
Решение которое хочет увидеть придумавший эту задачу:
- Сначала сортируем массив в порядке возрастания
- Одним итератером идем с конца, другим - с начала
- Складываем числа под итераторами. Если равна нужному, то вывести пару. Если меньше нужной двигаем итератор с одной стороны, иначе с другой. Когда итераторы равны выходим из цикла.