Task 91. Обработка массива

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]

Реализация:

реализация на C#

https://gist.github.com/unilecs/4d8f3eae37f5b75a911aded7abdd3655

Test:

https://dotnetfiddle.net/sK8AJ2

Report Page