Дан массив, содержащий 2018 положительных целых чисел, меньших 10000. Необходимо найти и вывести минимальный из тех элементов этого массива, десятичная и шестнадцатеричная запись которых заканчивается одним и тем же символом. Если таких чисел в массиве нет, ответ считается равным 10000.
Например, для массива из четырёх элементов, равных 80, 91, 162 и 250, в ответе должно получиться 80. В
шестнадцатеричном виде эти числа записываются как 50, 5B, A2 и FA. Последний символ в десятичной и шестнадцатеричной записи совпадает у первого и третьего числа, меньшее из них – первое, то есть 80.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
| Бейсик | Python |
|---|---|
CONST N=2018 DIM A(N) AS INTEGER DIM I, M, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END
| # допускается также #использование #целочисленных # переменных m, k a = [] N = 2018 for i in range(0, N): a.append(int(input())) …
|
| Паскаль | Алгоритмический язык |
const N=2018; var a: array [1..N] of integer; i, m, k: integer; begin for i:=1 to N do readln(a[i]); … end.
| алг нач цел N=2018 целтаб a[1:N] цел i, m, k нц для i от 1 до N ввод a[i] кц … кон |
| Си++ | |
#include <iostream> using namespace std; const int N = 2018; int main(){ int a[N]; int i, m, k; for (i=0; i … return 0; } | |
В качестве ответа необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и версию языка программирования). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Последний символ записи числа в позиционной системе счисления показывает остаток от деления этого числа на основание системы.
Для решения задачи необходимо просмотреть все числа в массиве и выбрать минимальное среди тех, которые дают одинаковый остаток при делении на 10 и на 16.
| Паскаль |
|---|
m:=10000; for i:=1 to N do begin if (a[i] mod 16 = a[i] mod 10) and (a[i] < m) then m := a[i]; end; writeln(m) |
При использовании Python можно применить специальные средства этого языка, которые позволяют записать все действия в одной строке без явного задания цикла.
| Python |
|---|
print(min((m for m in a if m%10 == m%16), default=10000)) |
При написании подобной программы очень важно использовать параметр default (допустим, начиная с версии Python 3.4) или какой-то другой способ обработки ситуации, когда в исходных данных нет подходящих элементов.

