// PascalABC.NET 3.3, сборка 1634 от 14.02.2018 // Внимание! Если программа не работает, обновите версию!
procedure Fib(n:integer; var r:sequence of integer); begin if n<1 then exit; // нечего глупости задавать case n of 1: r:=Seq(1); 2: r:=Seq(1,1); else begin r:=Seq(1,1); var (p1,p2):=(1,1); var p:integer; loop n-2 do begin p:=p1+p2; r:=r+Seq(p); (p1,p2):=(p2,p) end end end end;
begin var s:sequence of integer; var n:=ReadInteger('n='); Fib(n,s); s.Println end.
Три символа алфавита могут быть закодированы в системе счисления по основанию 3, т.е. в троичной системе счисления. При этом под первым номером кодируется число 0, которое записано по условию как , т.е. символ F кодируется нулем. Вторым номером кодируется число 1 и его запись по условию N, откуда мы узнаем, что символ N кодируется цифрой 1. Тогда оставшийся символ S кодируется цифрой 2. И действительно, третьей идет комбинация символов S. Любой член в последовательности кодов может быть получен путем перевода в троичную систему числа, на единицу меньшего номеру этого члена (поскольку отсчет кодов идет с нуля, а члены последовательности нумеруются с единицы). Проверим наше построение для контрольного значения n99=NFNSS. 98(3)=10122 -> NFNSS, что соответствует условию. Теперь само решение. 7) 6(3)=00020 -> FFFSF 27) 26(3)=00222 -> FFSSS 90) 89(3)=10022 -> NFFSS 101) 100(3)=10201 -> NFSFN 196) 195(3)=21020 -> SNFSF
49:2=24(ост.1)
24:2=12(ост.0)
12:2=6(ост.0)
6:2=3(ост.0)
3:2=1(ост.1)
99(10)=1100011(2)