Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2013, 14:24   #1
APEJl
 
Регистрация: 21.10.2013
Сообщений: 4
По умолчанию Задача перебор


помогите пожалуйста решить данную задачу, заранее спасибо!
APEJl вне форума Ответить с цитированием
Старый 30.11.2013, 18:36   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

http://www.programmersforum.ru/showp...70&postcount=3
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 30.11.2013, 19:24   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Я заглянул сюда: http://ru.wikipedia.org/wiki/Алгоритм_Нарайаны
и получил такое решение (для теста):
Код:
function NarayanaNextPerm(var a: array of integer; n: integer): integer;
var
  i, k, t, tmp: integer;
begin
  //Шаг 1
  k := n - 2;
  while (k >= 0) and (a[k] >= a[k+1]) do
    k := k - 1;

  if k = -1 then begin
    NarayanaNextPerm := 0;
    Exit;
  end;

  //Шаг 2
  t := n - 1;
  while (t >= k + 1) and (a[k] >= a[t]) do
    t := t - 1;
  tmp := a[k];
  a[k] := a[t];
  a[t] := tmp;

  //Шаг 3
  for i := k + 1 to (n + k) div 2 do begin
    t := n + k - i;
    tmp := a[i];
    a[i] := a[t];
    a[t] := tmp;
  end;
  NarayanaNextPerm := i;
end;

var mas: array[1..4] of integer;
    i, j, n, m : integer;
Begin
   n := 4;
   for i := 1 to n do
      mas[i] := i;
   for m := 1 to 23 do begin
     j := NarayanaNextPerm(mas, n);

     for i := 1 to n do
       write('  ',mas[i]);
     writeln();
   end;
   readln();

End.
Идея состоит в следующем:
1. Считываем данные в массив: Ishod[i]
2. Используем полученную последовательность как начальную (выводим на экран или в файл)
3. Формируем массив целых чисел по возрастанию от 1 до n (нумерация элементов исходного массива).
Vspom[i] := i;
4. В цикле от 1 до n!-1 (оставшееся число перестановок)
5. Применяем к этому массиву перестановку по алгоритму Нарайа́ны.
6. Выводим/формируем в файле массив наших элементов в том порядке, который получен в промежуточном массиве.
writeln(Ishod[Vspom[i]]);
7. Если цикл не завершился то к п.5.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа перебора вариантов (изменить перебор цифровой на перебор буквенный) BArt2000 Паскаль, Turbo Pascal, PascalABC.NET 5 02.03.2015 12:56
Задача (перебор) Aerowalk Помощь студентам 2 22.11.2010 19:28
Объсните решение!Вырубка деревьев.Паскаль.Задача перебор! suppppper2007 Помощь студентам 7 29.07.2009 19:47
Задача (наверное на перебор) Witaliy Паскаль, Turbo Pascal, PascalABC.NET 4 18.01.2009 18:11
Задача на большой перебор МаксимNEWProgramm Паскаль, Turbo Pascal, PascalABC.NET 2 06.04.2008 18:15