Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


hasherfrog
Цитата hasherfrog:
Мало данных для анализа, как говоривает кое-кто из моих знакомых
Уж точно не я, данных вполне достаточно

Surround
Цитата Surround:
есть набор символов, скажем A и B. Нужно составить, например, все возможные 6-символьные комбинации из этих знаков, причем, чтобы ни одни подряд более 3х раз не повторялся.
Заметьте, что это простейшая задача по двоичной арифметике, с ней возиться как минимум не интересно. Рассмотрите такой вариант:
Код: Выделить весь код
program Project1; {by Savant}

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

const
  js = 2; { Кол-во различных символов }
  jp = 3; { Максимально допустимое кол-во повторяющихся символов}
  jm = 6; { Кол-во символов в строке }
  a: array[1..js] of Char = ('A','B');
var
  i: Integer; { ИМХО byte/shortint не рекомендую использовать, при вычислениях он приводится к Cardinal/Integer }
  b: array[1..jm] of Char;
  res: TStrings;
function passed: Boolean;
{ Проверяет текущее значение b на допустимость по кол-ву повторений }
var
  x,y: Integer;
  c: array[1..jp+1] of Char;
begin
  Result:=True;
  for x:=1 to js do begin
    for y:=1 to jp+1 do c[y]:=a[x];
    if Pos(c,b) <> 0 then Result:=False;
  end;
end;
procedure moving(k,j: Integer);
var
  i: Integer;
begin
  for i:=j to js do begin
    b[k]:=a[i];
    if passed then
      if res.IndexOf(b)=-1 then res.Add(b);
    if k > 1 then moving(k-1,1);
  end;
end;
begin
  res:=TStringList.Create;
  try
    for i:=1 to jm do b[i]:=a[1];
    for i:=1 to jm do moving(i,2);
    for i:=0 to res.Count-1 do WriteLn(res.Strings[i]);
  finally
    res.Free;
  end;
  ReadLn;
end.
Как видите, он более универсальный. По умолчанию настроен на решение Вашей задачи. И вроде как даже работает . Вот что мне программа выдала после выполнения. Если результат неверен, предупреждайте сразу, я покопаюсь в коде:
BBBAAA
BABAAA
AABAAA
ABBAAA
BBABAA
BAABAA
AAABAA
ABABAA
BABBAA
AABBAA
ABBBAA
BBBABA
BBAABA
BAAABA
ABAABA
BABABA
AABABA
ABBABA
BBABBA
BAABBA
AAABBA
ABABBA
BABBBA
AABBBA
BBBAAB
BBAAAB
ABAAAB
BABAAB
AABAAB
ABBAAB
BBABAB
BAABAB
AAABAB
ABABAB
BABBAB
AABBAB
ABBBAB
BBBABB
BBAABB
BAAABB
ABAABB
BABABB
AABABB
ABBABB
BBABBB
BAABBB
AAABBB
ABABBB

p.s.: я тут несколько по геморному скопировал код, если чо не компилится, сообщайте.

Отправлено: 15:35, 15-01-2005 | #4