Дан массив, содержащий 2020 положительных целых чисел, не превышающих 15 000. Необходимо найти минимальный элемент, двоичная запись которого заканчивается не более чем одним нулём, уменьшить все нечётные элементы массива, превышающие найденный минимум, на величину этого минимума и вывести изменённый массив. Если в массиве нет элементов, двоичная запись которых заканчивается не более чем одним нулём, нужно вывести массив без изменений.
Например, для массива из шести элементов, равных 12, 13, 18, 19, 20, 15, нужно получить и вывести массив, содержащий числа 12, 13, 18, 6, 20, 2.
Напишите на одном из языков программирования программу для решения этой задачи.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
| Бейсик | Python |
|---|---|
CONST N=2020 DIM A(N) AS INTEGER DIM I, K, M AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END
| # кроме уже указанных # допускается использование # целочисленных переменных # k, m a = [] n = 2020 for i in range(0, n): a.append(int(input())) …
|
| Паскаль | Алгоритмический язык |
const N=2020; var a: array [1..N] of integer; i, k, m: integer; begin for i:=1 to N do readln(a[i]); … end.
| алг нач цел N=2020 целтаб a[1:N] цел i, k, m нц для i от 1 до N ввод a[i] кц … кон |
| С++ | |
#include <iostream> using namespace std; const int N=2020; int main(){ int a[N]; int i, j, k; for (i=0; i<N; ++i) cin >> a[i]; … return 0; }
| |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Задача решается в два прохода: на первом проходе определяется минимум, на втором проходе производится корректировка и вывод элементов. Возможно решение в три прохода, когда на втором проходе выполняется только замена значений, а на третьем — вывод. Числа, двоичная запись которых заканчивается двумя и более нулями, кратны 4, значит, требуется искать минимум среди чисел, не кратных 4.
| Паскаль |
|---|
k := 15001; for i := 1 to N do if (a[i] < k) and (a[i] mod 4 > 0) then k:=a[i]; for i := 1 to N do begin if (a[i] > k) and (a[i] mod 2 = 1) then a[i] := a[i] − k; writeln(a[i]) end |
| Алгоритмический язык |
k := 15001 нц для i от 1 до N если a[i] < k и mod(a[i], 4) > 0 то k := a[i] все кц нц для i от 1 до N если a[i] > k и mod(a[i], 2) = 1 то a[i] := a[i] − k все вывод a[i], нс кц |
| Бейсик |
K = 15001 FOR I = 1 TO N IF A(I) < K AND A(I) MOD 4 > 0 THEN K = A(I) END IF NEXT I FOR I = 1 TO N I F A(I) > K AND A(I) MOD 2 = 1 THEN A(I) = A(I) − K END IF PRINT A(I) NEXT I |
| Python |
k = 15001 for i in range(0, n): if (a[i] < k and a[i] % 4 > 0): k=a[i] for i in range(0, n): if (a[i] > k and a[i] % 2 == 1): a[i] = a[i] − k print(a[i]) |
| Си |
k = 15001; for (i = 0; i < N; i++) if (a[i] < k && a[i]%4 > 0) k=a[i]; for (i = 0; i < N; i++) { if (a[i] > k && a[i]%2 == 1) a[i] = a[i] − k; cout << a[i]; } |

