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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 14:59   #1
Руслан666
Новичок
Джуниор
 
Регистрация: 02.12.2012
Сообщений: 6
По умолчанию Третья сложная и олимпиадная задача - на пронумерованных плитках три кузнечика, которые играют в чехарду

За решение заранее спасибо
Дорожка замощена плитками в один ряд, плитки пронумерованы числами от 1 до 1000. На плитках с номерами A,B, И C(A<B<C) сидят три кузнечика, которые играют в чехарду по следующим правилам:
1. На одной плитке может находиться только один кузнечик.
2. За один ход один из двух крайних кузнечиков(то есть с плитки A или с плитки C) может перепрыгнуть через среднего кузнечика(плитка B) и встать в плитку, которая находится ровно посередине между двумя оставшимися кузнечиками(то есть B и C или A и B соотвественно).
Если между двумя оставшимися кузнечиками находится четное число плиток, то он может выбрать любую из двух центральных плиток.
Например, если кузнечики первоначально сидели на плитках номер 1,5,10, то первым ходом кузнечик с плитки номер 10 может перепрыгнуть на плитку номер 3(она находится посередине между 1 и 5), или кузнечик с плитки номер 1 может перепрыгнуть на плитку номер 7 или 8(эти две плитки находятся посередине между плитками 5 и 10).
Даны три типа числа: A,B,C. Определите, какое наибольшее число ходов может продолжаться игра.

ФОрмат входных данных
Программа получает на вход три целых числа A,B и C (1<=A<B<C<=1000), записанных в отдельных строках.

Примечание:!
В примере сначала кузнечик с плитки 6 прыгает на плитку 3. Затем кузнечик с плитки 4 прыгает на плитку 2.
Руслан666 вне форума Ответить с цитированием
Старый 02.12.2012, 16:38   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
var
  a, b, c: integer;

function max(a, b: integer): integer;
begin
  if a > b then
    max := a
  else
    max := b;
end;

function leapfrog(a, b, c: integer): integer;
var
  t: integer;
begin
  t := 0;
  if b - a > 1 then
    if (b - a) mod 2 = 0 then
      t := max(t, leapfrog(a, (b - a) div 2 + a, b))
    else
    begin
      t := max(t, leapfrog(a, (b - a) div 2 + a, b));
      t := max(t, leapfrog(a, (b - a) div 2 + a + 1, b));
    end;
  if c - b > 1 then
    if (c - b) mod 2 = 0 then
      t := max(t, leapfrog(b, (c - b) div 2 + b, c))
    else
    begin
      t := max(t, leapfrog(b, (c - b) div 2 + b, c));
      t := max(t, leapfrog(b, (c - b) div 2 + b + 1, c));
    end;
  leapfrog := t + ord((b - a > 1) or (c - b > 1));
end;

begin
  readln(a, b, c);
  writeln(leapfrog(a, b, c));
  readln;
end.
Не уверен.
Когда мы увидим Ваши наработки?
На олимпиаде плохо "мухлевать".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложная олимпиадная задача-игровое поле размером 3х3, заполненное числами от 1 до 9, обойти все клетки составив максимальное число Руслан666 Паскаль, Turbo Pascal, PascalABC.NET 0 02.12.2012 14:58
Программа. Даны 2 множества точек на плоскости - найти те три, которые образуют нужный треугольник ( C++ ) anya4363 Помощь студентам 0 06.02.2012 13:44
Как определить количество слов, которые содержат ровно три буквы JegorX Паскаль, Turbo Pascal, PascalABC.NET 1 15.11.2011 15:52
Даны три числа. Выберите те из них, которые принадлежат заданному отрезку [а, b]. Sheff903 Помощь студентам 1 27.11.2007 21:28