Не так давно Савелий переехал в новый район и теперь живёт в многоэтажном доме на этаже N. В доме Савелия три лифта. Лифт «A» и лифт «C» – грузопассажирские (рассчитаны на 8 человек), а лифт «B» – пассажирский (рассчитан на 4 человека). В первые месяцы жизни в новом доме Савелий выяснил, что лифты работают по следующим правилам:
В первую очередь приезжает ближайший лифт, при этом неважно, находится он выше или ниже нужного этажа.
Если есть лифты, находящиеся на одинаковом расстоянии от нужного этажа и среди них есть пассажирский лифт, то предпочтение отдаётся ему.
Если есть два грузовых лифта, находящиеся на одинаковом расстоянии выше и ниже нужного этажа, то приезжает лифт, находящийся выше.
При прочих равных условиях предпочтение отдаётся лифту «A».
Правила применяются строго в указанном порядке.
Савелий вышел из квартиры и вызвал лифт, чтобы спуститься на первый этаж. Известно, на каких этажах находятся лифты «A», «B» и «С». Необходимо определить, какой именно лифт приедет на этаж Савелия.
Формат ввода:
На отдельных строках вводятся 4 числа – N (этаж, на котором живёт Савелий), A (этаж, на котором находится лифт «A»), B (этаж, на котором находится лифт «B»), C (этаж, на котором находится лифт «C»).
Все числа натуральные и не превышают 100.
Формат вывода:
Необходимо вывести один из латинских символов «A», «B» или «C» – обозначение лифта, который приедет на этаж Савелия.
Программу написать на языке ABCpascal)
Для определения информационного объема сообщения воспользуемся формулой: I = K * i, где K - количество символов, i - вес одного символа.
1) 1024 страницы, на одной странице помещается 64 строки, а в строке помещается 64 символа. Каждый символ в кодировке КОИ-8 занимает 8 бит памяти.
i = 8 бит
K = 1024 * 64 * 64 = 4194304 символов,
I = 4194304 * 8 = 33554432 бит = 4194304 байт = 4096 Кбайт = 4 Мбайт
2) 512 страниц, на одной странице в среднем помещается 64 строки, а в строке 64 символа. (Каждый символ в кодировке Unicode занимает 16 бит памяти.)
i = 16 бит
K = 512 * 64 * 64 = 2097152 символов,
I = 2097152 * 16 = 33554432 бит = 4194304 байт = 4096 Кбайт = 4 Мбайт
*8 бит = 1 байт
1024 байт = 1 Кбайт
1024 Кбайт = 1 Мбайт
//PascalABC.Net 3.0, сборка 1052
function NOD(a, b: longint): longint;
begin
while a <> b do if a > b then a := a - b else b := b - a;
NOD := a
end;
var
f: Text;
tNOD: longint;
begin
Assign(f, 'input.txt'); Reset(f);
if not Eof(f) then Readln(f, tNOD);
var n: longint := 1;
while (not Eof(f)) and (n > 0) and (tNOD > 1) do
begin
Readln(f, n);
if n <> 0 then tNOD := NOD(tNOD, n)
end;
Close(f);
Assign(f, 'output.txt'); Rewrite(f);
Writeln(f,tNOD);
Close(f)
end.
2. "Современный" вариант
//PascalABC.Net 3.0, сборка 1052
function NOD(a, b: integer): integer;
begin
while a <> b do if a > b then a -= b else b -= a;
Result := a
end;
var
tNOD: integer := 0;
n: integer;
begin
foreach var sn in Readlines('input.txt') do
begin
n := StrToInt(sn);
if tNOD = 0 then tNOD := n
else
if n = 0 then break else tNOD := NOD(tNOD, n);
end;
WriteAllText('output.txt', IntToSTR(tNOD));
end.
Пример файла input.txt находится во вложении, контрольный результат 4096