Дан массив, содержащий 2018 положительных целых чисел, не превышающих 15 000. Необходимо удвоить те элементы этого массива, которые меньше удвоенного минимального элемента, и вывести изменённый массив по одному элементу в строке.
Например, для исходного массива из 5 элементов 60 47 27 95 54 программа должна вывести числа 60 94 54 95 54 по одному числу в строке (минимальный элемент исходного массива равен 27, удвоены все элементы, меньшие 54).
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
| Бейсик | Python |
|---|---|
CONST N=2018 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 = 2018 for i in range(0, n): a.append(int(input())) …
|
| Паскаль | Алгоритмический язык |
const N=2018; var a: array [1..N] of integer; i, k, m: integer; begin for i:=1 to N do readln(a[i]); … end.
| алг нач цел N=2018 целтаб a[1:N] цел i, k, m нц для i от 1 до N ввод a[i] кц … кон |
| С++ | |
#include <iostream> using namespace std; const int N=2018; int main(){ int a[N]; int i, k, m; for (i=0; i<N; ++i) cin >> a[i]; … return 0; }
| |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Задача решается в два прохода: на первом проходе определяется минимальный элемент, на втором производится корректировка и вывод элементов. Возможно решение в три прохода, когда на втором проходе выполняется только замена значений, а на третьем — вывод.
Пример правильной программы на языке Паскаль:
| Паскаль |
|---|
m := 15001; for i:=1 to N do begin if a[i] < m then m := a[i] end; for i:=1 to N do begin if a[i] < 2*m then a[i] := 2*a[i]; writeln(a[i]) end; |
При использовании языка Python первый проход можно записать в одну строку, используя функцию min.
| Python |
|---|
m = min(a) for i in range(0,n): if a[i] < 2*m: a[i] *= 2 print(a[i]) |
Использовать описанную выше возможность не обязательно, на языке Python допустимо описывать развёрнутый алгоритм решения, аналогичный приведённой выше программе на языке Паскаль.

