Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

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

Аватара для Savant

Старожил


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

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


Surround
Цитата:
по какому принципу заполняется массив b с символами?
Лично мне вспомнили старые кассовые аппараты (или что-то типа того). Ну короче. Представь бесконечно длинный стержень. На нём jm колец, на каждом из которых высечено js символов. Изначально на всех кольцах стоит первый символ. И дальше они слева направо начинают крутиться . Дальше объяснения перейдут непосредственно к коду, иначе не понять всех тонкостей .
Код: Выделить весь код
procedure moving(k,j: Integer);
{ рекурсивная функция, сдвигает символ в k-той позиции, начиная с j-ного }
var
  i: Integer; { "счетчик" цикла }
begin
  for i:=j to js do begin { т.к. придется прокрутить ВСЕ символы, ставим цикл}
    b[k]:=a[i]; { прокручиваем на 1 символ вперед в текущей k-той позиции }
    if passed then { проверяем получившуюся строку b на соответствие условию }
      if res.IndexOf(b)=-1 then res.Add(b); { добавляем в общий список, если такого там еще нет }
{ Здесь я обязан сделать отступление и прокомментировать предыдущую строчку:
   не знаю по каким причинам, но примерно 10% результатов повторяются =) , кто найдет
   место "облома", тому огромная благодарность }
    if k > 1 then moving(k-1,1); { если есть еще кольца слева, то крутим и их }
{ Заметьте, что здесь j=1, а при вызове из главной программы j=2,
   это введено для уменьшения цикла, т.к. изначально на всех кольцах 
   установлен первый символ из списка, т.е. b[k] уже равно a[1] }
  end;
end;
Ну хоть немножко я прояснил ситуацию?

Отправлено: 12:30, 16-01-2005 | #12