Task 91. Обработка массива
UniLecsЗадача: дан массив input из N целых чисел. Необходимо получить массив output, таким образом, что output[i] равно произведению всех элементов массива input[i] кроме input[i].
Входные данные: input - массив из N целых чисел, где N меньше 10^4, значения input[i] по модулю также меньше 10^4.
Вывод: массив output.
Пример:
input = [1, 2, 3, 4]
output = [24, 12, 8, 6]
Идея: т.к. мы работаем с целыми числами, то вариант с произведением всех чисел исходного массива и затем деления на input[i] не пройдет, т.к. input[i] может быть 0.
Поэтому рассмотрим другой способ: заведем два массива: leftArr, rightArr, где
leftArr[i] = input[1] * input[2] * ... input[i - 1]
rightArr[i] = input[i + 1] * input[i + 2] * ... * input[N]
Т.е. в leftArr[i] храним произведение всех элементов исходного массива от 1го до iго не включительно,
а в rightArr[i] - произведение всех элементов от Nго до i + 1. (Здесь нумерация массива указана с 1-цы).
Тогда выходной массив мы получим след.образом:
output[i] = leftArr[i] * rightArr[i]
Реализация:
https://gist.github.com/unilecs/4d8f3eae37f5b75a911aded7abdd3655
Test: