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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2010, 14:36   #1
Karlsson)))
 
Регистрация: 18.12.2010
Сообщений: 3
Вопрос логическая задача.

Помогите пож-та с примером.
"Репортеру местной газеты поручили сделать репортаж о соревнованиях по плаванию. Придя в бассейн, он обнаружил, что наблюдение за соревнованием - занятие скучное и решил скоротать время до конца соревнований в соседнем баре за чашечкой кофе. За приятными беседами время летело незаметно и когда он, наконец, вернулся в бассейн, соревнования уже закончились. Бросившись к расходящимся зрителям, он выяснил только следующее:
- в соревнованиях участвовало восемь спортсменов-А,B,C,D,E,F,G и Н;
-первое место разделили два спортсмена;
-последнее место также разделили два спортсмена.
В раздевалке он услышал:
A:"Зрители очень радовались, что я опередил F и H "
В:"Мне удалось опередить С и прийти к финишу раньше, чем А"
С: "Я не даю интервью"
D:"Обогнать С мне конечно удалось, но пришел следом за ним"
Е:"К сожалению, я опять отстал от G"
F:"Я безуспешно попыфтлася догнать Н, но тот оказался сильнее"

Необходимо помочь нашему герою восстановить распределение мест, учитывая, что вся добытая инфа истинна.

я так думаю надо решать методом перебора...какие есть мысли?
Karlsson))) вне форума Ответить с цитированием
Старый 19.12.2010, 10:34   #2
NioTo
Пользователь
 
Регистрация: 17.12.2007
Сообщений: 32
По умолчанию

Код:
program PlacesDistrbution;

var
  Sportsmans: Array['A'..'H'] of Integer = (1, 1, 2, 3, 4, 5, 6, 6);

procedure Swap(var A: Integer; var B: Integer);
var
  Temp: Integer;
begin
  Temp := A;
  A := B;
  B := Temp;
end;

procedure GenerateCombinations(N: Integer);
var
  i: Char;
begin
  if N = 1 then begin
    if (Sportsmans['A'] < Sportsmans['F']) and (Sportsmans['A'] < Sportsmans['H']) and (Sportsmans['B'] < Sportsmans['C']) and (Sportsmans['B'] < Sportsmans['A']) and (Sportsmans['D'] = Sportsmans['C'] + 1) and (Sportsmans['E'] > Sportsmans['G']) and (Sportsmans['F'] > Sportsmans['H']) then
      for i := 'A' to 'H' do
        WriteLn(i, ' -> ', Sportsmans[i])
  end else begin
    for i := 'A' to Chr(Ord('A') + N - 1) do begin
      Swap(Sportsmans[i], Sportsmans[Chr(Ord('A') + N - 1)]);
      GenerateCombinations(N - 1);
      Swap(Sportsmans[i], Sportsmans[Chr(Ord('A') + N - 1)]);
    end;
  end;
end;

begin
  GenerateCombinations(Length(Sportsmans))
end.
28 решений, видать с условием намудрил...

Вот одно из них:
A -> 4
B -> 1
C -> 2
D -> 3
E -> 6
F -> 6
G -> 1
H -> 5

Последний раз редактировалось NioTo; 19.12.2010 в 10:56.
NioTo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЛОГИЧЕСКАЯ ФОРМУЛА akril39 Microsoft Office Excel 2 11.04.2010 22:11
Логическая ошибка C++ slim>>> Помощь студентам 2 24.01.2010 18:32
Логическая задача Senator Помощь студентам 1 06.06.2008 04:01
Логическая задача на паскале МаксимNEWProgramm Паскаль, Turbo Pascal, PascalABC.NET 14 14.04.2008 11:41