Олимпиадное задание. Стеки - Free Pascal
Формулировка задачи:
Помогите решить задачку через стеки :
'Есть одна последовательность, так называемая 'Треугольная' строится она следующим образом:
S(1) = { 1 };
S(2) = { 1,2,1 };
S(3) = { 1,2,1,3,1,2,1 };
S(n) = { S(n - 1), i, S(n - 1) };
Необходимо разработать способ, который будет находить число на k - й позиции в n - ом члене.
1 <= n,k <= 2^64;
Если в члене n нет такой позиции, т.е. k > length(S(n)) то вывести No solution.'
Решение задачи: «Олимпиадное задание. Стеки»
textual
Листинг программы
uses SysUtils; function f(k: QWord): Integer; var i: Integer; begin for i := 0 to 63 do if k and (QWord(1) shl i) <> 0 then exit(i + 1); exit(65); end; var sn, sk: String; n, k: QWord; begin ReadLn(sn); ReadLn(sk); n := StrToQWordDef(sn, 0); k := StrToQWordDef(sk, 0); if (k = 0) and ((n = 0) or (n > 64)) then WriteLn('65') else if (n <> 0) and (k >= QWord(1) shl n) then WriteLn('No solution') else WriteLn(f(k)); end.
Объяснение кода листинга программы
- В функции
f(k: QWord): Integer;
реализован алгоритм проверки битовых полей числаk
на наличие единицы в каждом из них. - В основной части программы считываются строки
sn
иsk
, которые интерпретируются как числаn
иk
соответственно. - Если
k
равно нулю иn
равно нулю или больше 64, то выводится число 65. - Если
n
не равно нулю иk
больше или равноQWord(1) shl n
, то выводится строкаNo solution
. - В противном случае выводится результат работы функции
f(k)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д