В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести **...

0 голосов
1.0k просмотров

В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О».
Нужно вывести на экран все возможные слова, состоящие из K букв,
в которых есть по крайней мере две одинаковые буквы,
не обязательно стоящие рядом. Программа не должна строить другие слова,
не соответствующие условию.


Информатика (252 баллов) | 1.0k просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Const
  ab = 'ышчо'; //алфавит племени
var
  vort: string;
  j, k, raz: integer;
  per: boolean;//признак переноса разряда

//проверка наличия совпадающих букв в слове
function kond(var vort: string): boolean;
var
  n: integer;
begin
  result := false;
  n := length(vort);
  for var i := 1 to n - 1 do
    for var j := i + 1 to n do
      if vort[j] = vort[i] then
      begin
        result := true;
        exit;
      end;
end;

begin
  writeln('Введите k');
  readln(k);
  for var i := 1 to k do
    vort := vort + ab[1];
  raz := k;
  per := false;
  while raz > 0 do
    if per then
    begin
      while vort[raz] = ab[4] do
      begin
        vort[raz] := ab[1];
        raz := raz - 1;
        if raz < 1 then exit;
      end;
      j := pos(vort[raz], ab) + 1;
      vort[raz] := ab[j];
      per := false;
      raz := k;
    end
      else
    begin
      if kond(vort) then writeln(vort);
      j := pos(vort[k], ab) + 1;
      if j > 4 then
        per := true
      else
        vort[k] := ab[j];
    end;
end. 

(6.2k баллов)