В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на экран все возможные слова, состоящие из K букв, в которых есть по крайней мере две одинаковые буквы, стоящие рядом
procedure InitLongNumber(n: longint; var a: longnum); var i: longint; begin for i := 1 to len do if n <> 0 then begin a[i] := n mod 10; n := n div 10 end else a[i] := 0; end;
function mul(a: longnum; k: longint): longnum; var i, tmp: longint; begin tmp := 0;
for i := 1 to len - 1 do begin a[i] := a[i] * k + tmp; tmp := a[i] div 10; a[i] := a[i] mod 10 end;
result := a end;
procedure PrintLongNumber(a: longnum); var i, j: longint; begin i := len; while a[i] = 0 do dec(i); for j := i downto 1 do write(a[j]) end;
begin readln(n); InitLongNumber(1, s); for i := 1 to n do s := mul(s, i); write(n, '! = '); PrintLongNumber(s); end.
const
K = 5; // можно сделать переменной и запрашивать у пользователя
alpha : array[1 .. 4] of char = ('Ы', 'Ш', 'Ч', 'О');
var count : integer := 0;
procedure p(s : string);
begin
if s.Length = K then
begin
writeln(s);
inc(count);
end
else
begin
var L := s.Length;
if (s.Length < 2) or (s[2] = 'Ы') then
foreach var ch : char in alpha do p(s + ch);
end;
end;
begin
p('');
writeln('count = ', count);
end.