Решение: Обработка элементов массива
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите алгоритм, который находит сумму элементов массива, больших 100 и при этом не кратных 4, а затем заменяет каждый такой элемент на число, равное найденной сумме. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строки.
Исходные данные объявлены следующим образом. Разрешается использовать только указанные переменные.
Бейсик:
CONST N AS INTEGER = 30
DIM A (1 TO N) AS LONG
DIM I AS LONG, J AS LONG, K AS LONG
FOR I = 1 TO N
INPUT A(I)
NEXT I
...
END
Python:
a = []
n = 30
for i in range(0, n):
a.append(int(input()))
...
Алгоритмический язык:
алг
нач
цел N = 30
целтаб a [1:N]
цел i, j, k
нц для i от 1 до N
ввод a[i]
кц
...
кон
Паскаль:
const N = 30;
var a: array [1..N] of longint;
i, j, k: longint;
begin
for i := 1 to N do
readln(a[i]);
...
end.
C++:
const int N = 30;
int main() {
long a[N];
long i, j, k;
for (i = 0; i < N; i++)
cin >> a[i];
...
return 0;
}
Приведите фрагмент программы, который должен находиться на месте многоточия. Можно использовать другой язык программирования, указав его название и версию, но необходимо использовать те же исходные данные и переменные.
Решение по шагам
4 шагаДля каждого элемента проверяем два условия: он должен быть больше 100 и не должен делиться на 4 без остатка.
$$a_i > 100 \land a_i \bmod 4 \ne 0$$В первом проходе складываем все элементы, удовлетворяющие этим условиям.
$$S = \sum_{i=1}^{30} a_i$$Во втором проходе заменяем каждый подходящий элемент на найденную сумму $S$.
После замены выводим все элементы массива по одному в строке.
Например, решение на Python:
s = 0
for i in range(n):
if a[i] > 100 and a[i] % 4 != 0:
s += a[i]
for i in range(n):
if a[i] > 100 and a[i] % 4 != 0:
a[i] = s
for i in range(n):
print(a[i])
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Заменяют элементы во время первого прохода и из-за этого теряют исходные значения, необходимые для вычисления суммы.
Используют условие $a_i \% 4 = 0$ вместо условия $a_i \% 4 \ne 0$.
Забывают строгое условие $a_i > 100$ и включают элемент, равный 100.
Выводят сумму вместо изменённого массива.
Используют переменную, которая не была объявлена в условии.