Олимпиадное задание. Стеки - 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
Листинг программы
  1. uses
  2.   SysUtils;
  3.  
  4. function f(k: QWord): Integer;
  5. var
  6.   i: Integer;
  7. begin
  8.   for i := 0 to 63 do
  9.     if k and (QWord(1) shl i) <> 0 then
  10.       exit(i + 1);
  11.   exit(65);
  12. end;
  13.  
  14. var
  15.   sn, sk: String;
  16.   n, k: QWord;
  17. begin
  18.   ReadLn(sn);
  19.   ReadLn(sk);
  20.   n := StrToQWordDef(sn, 0);
  21.   k := StrToQWordDef(sk, 0);
  22.   if (k = 0) and ((n = 0) or (n > 64)) then
  23.     WriteLn('65')
  24.   else if (n <> 0) and (k >= QWord(1) shl n) then
  25.     WriteLn('No solution')
  26.   else
  27.     WriteLn(f(k));
  28. end.

Объяснение кода листинга программы

  1. В функции f(k: QWord): Integer; реализован алгоритм проверки битовых полей числа k на наличие единицы в каждом из них.
  2. В основной части программы считываются строки sn и sk, которые интерпретируются как числа n и k соответственно.
  3. Если k равно нулю и n равно нулю или больше 64, то выводится число 65.
  4. Если n не равно нулю и k больше или равно QWord(1) shl n, то выводится строка No solution.
  5. В противном случае выводится результат работы функции f(k).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы