Выведите одно натуральное число – номер ближайшего предка для двух видов - Pascal
Формулировка задачи:
Возможно как-то неправильно назвал тему, но вот суть:
Условие
Как решил я
Подозреваю, что там длинная арифметика, но не на первом же тесте такие большие числа.
В чём еще может быть ошибка
Во время исследований, посвященных появлению жизни на планете Олимпия, учеными было сделано несколько сенсационных открытий:
Все живые организмы планеты происходят от бактерии Bitozoria Programulis.
Эволюция происходила шаг за шагом (по предположению ученых – во время изменения климата на планете).
На каждом шаге эволюции из каждого вида образовывались ровно два подвида, а предыдущий вид исчезал.
Если считать появление бактерии Bitozoria Programulis первым шагом эволюции, то существующие сейчас живые организмы находятся на N-ом шаге.
Чтобы не придумывать названия во время исследований, ученые пронумеровали все виды организмов, которые когда-либо существовали на планете. Для этого они нарисовали дерево эволюции с корнем Bitozoria Programulis, которая получила номер 1. Далее нумеровали виды каждого шага эволюции слева направо. Таким образом непосредственные подвиды Bitozoria Programulis получили номера 2 и 3. Следующими были занумерованы виды третьего шага эволюции – подвиды вида 2 получили номера 4 и 5, а вида 3 – номера 6 и 7, и т.д.
Напишите программу, которая по номерам двух видов вычислит номер вида их ближайшего общего предка в дереве эволюции.
Входные данные
В первой строке входного файла INPUT.TXT записано целое число N (1 ≤ N ≤ 60) – количество этапов эволюции, которые произошли на планете Олимпия до текущего времени. Вторая и третья строки содержат по одному натуральному числу, которые представляют номера видов, для которых требуется найти номер их ближайшего общего предка.
Выходные данные
В выходной файл OUTPUT.TXT выведите одно натуральное число – номер ближайшего предка для двух видов.
var n,a,b:longint; begin readln(n,a,b); repeat a:=a div 2; b:=b div 2; until a=b; writeln(a); end.
Решение задачи: «Выведите одно натуральное число – номер ближайшего предка для двух видов»
textual
Листинг программы
type ExtRec = packed record m: uint64; p: smallint end; var f: extended; first: ExtRec absolute f; s: extended; second: ExtRec absolute s;
Объяснение кода листинга программы
- Определяется пользовательский тип
ExtRec
с помощью ключевого словаtype
, который является записью (record) и содержит два поля:m
типа uint64 иp
типа smallint. - Объявляются переменные:
f
типа extended иfirst
типа ExtRec с помощью ключевого словаvar
, гдеfirst
ассоциируется сf
с помощью ключевого словаabsolute
. Это означает, чтоfirst
иf
будут использовать одно и то же место в памяти для хранения данных. - Объявляются переменные:
s
типа extended иsecond
типа ExtRec с помощью ключевого словаvar
, гдеsecond
ассоциируется сs
с помощью ключевого словаabsolute
. Это означает, чтоsecond
иs
будут использовать одно и то же место в памяти для хранения данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д