Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле - Free Pascal

Узнай цену своей работы

Формулировка задачи:

У Пети имеется игровое поле размером 3×3 , заполненное числами от 1 до 9. В начале игры он может поставить фишку в любую клетку поля. На каждом шаге игры разрешается перемещать фишку в любую соседнюю по стороне клетку, но не разрешается посещать одну и ту же клетку дважды. Петя внимательно ведет протокол игры, записывая в него цифры в том порядке, в котором фишка посещала клетки. Пете стало интересно, какое максимальное число он может получить в протоколе. Помогите ему ответить на этот вопрос. Формат входных данных Входной файл содержит описание поля — 3 строки по 3 целых числа, разделенных пробелами. Гарантируется, что все девять чисел различны и лежат в диапазоне от 1 до 9. Формат выходных данных Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле. Ответ можно выводить не в виде числа, а в виде строки или в виде последовательности отдельных цифр (но не разделяя их пробелами). Пример Ввод 1 2 3 4 5 6 7 8 9 Вывод 987456321

Решение задачи: «Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле»

textual
Листинг программы
  1. Type tAr = array[1..3,1..3] of Byte;
  2. Var          { 987456321 987236145 897236145 987236145 }
  3.   m   : tAr := ((1,2,3),
  4.                 (4,5,6),
  5.                 (7,8,9));
  6.              { ((1,6,3),
  7.                 (4,7,2),
  8.                 (5,8,9)); }
  9.              { ((1,6,3),
  10.                 (4,7,2),
  11.                 (5,9,8)); }
  12.              { ((1,6,3),
  13.                 (4,9,2),
  14.                 (5,8,7)); }
  15.   i,j,k,n : Byte;
  16.  
  17. Function MaxSt(s1,s2 : String) : String;
  18. Begin
  19.   If Length(s1)=Length(s2) then
  20.     If s1>s2 then MaxSt:=s1 else MaxSt:=s2
  21.   else
  22.     If Length(s1)>Length(s2) then MaxSt:=s1 else MaxSt:=s2;
  23. end;
  24.  
  25. Function Path(x,y : Integer; mm : tAr) : String;
  26. Var b    : Char;
  27. Begin
  28.   If (x in [1..3]) and (y in [1..3]) and (mm[x,y]>0) then
  29.   Begin
  30.     b:=Chr(Ord('0')+mm[x,y]);
  31.     mm[x,y]:=0;
  32.     Path:=b+MaxSt(MaxSt(Path(x-1,y,mm),Path(x+1,y,mm)),MaxSt(Path(x,y-1,mm),Path(x,y+1,mm)));
  33.   end
  34.   else Path:='';
  35. end;
  36.  
  37. Begin
  38.   k:=1; n:=1;
  39.   For i:=1 to 3 do
  40.    For j:=1 to 3 do
  41.      If (m[i,j]>m[k,n]) and (not ((i+j) in [3,5])) then
  42.      Begin
  43.        k:=i; n:=j;
  44.      end;
  45.   Writeln(Path(k,n,m));
  46. end.

Объяснение кода листинга программы

  1. Объявлена матрица m размером 3x3 типа tAr, элементы которой принимают значения от 1 до 9.
  2. В цикле перебираются все возможные комбинации i, j, k, n от 1 до 3.
  3. Если элемент m[i,j] больше максимального элемента в текущей комбинации, то значения i, j, k, n обновляются.
  4. В функции Path(x,y,mm) перебираются все возможные комбинации путей (вверх, вниз, влево, вправо) от текущей позиции x, y и строится путь к максимальному числу.
  5. В функции MaxSt(s1,s2) сравниваются строки s1 и s2. Если они равны по длине, то выбирается более длинная. Если они не равны по длине, то выбирается более длинная строка.
  6. В цикле перебираются все возможные комбинации i, j, k, n от 1 до 3.
  7. Если элемент m[i,j] больше максимального элемента в текущей комбинации, то значения i, j, k, n обновляются.
  8. В функции Path(x,y,mm) перебираются все возможные комбинации путей (вверх, вниз, влево, вправо) от текущей позиции x, y и строится путь к максимальному числу.
  9. В функции MaxSt(s1,s2) сравниваются строки s1 и s2. Если они равны по длине, то выбирается более длинная. Если они не равны по длине, то выбирается более длинная строка.
  10. В функции Path(x,y,mm) выводится путь к максимальному числу.
  11. Значения i, j, k, n устанавливаются равными 1.
  12. Цикл перебирает все возможные комбинации i, j, k, n от 1 до 3.
  13. Если элемент m[i,j] больше максимального элемента в текущей комбинации, то значения i, j, k, n обновляются.
  14. В функции Path(x,y,mm) перебираются все возможные комбинации путей (вверх, вниз, влево, вправо) от текущей позиции x, y и строится путь к максимальному числу.
  15. В функции MaxSt(s1,s2) сравниваются строки s1 и s2. Если они равны по длине, то выбирается более длинная. Если они не равны по длине, то выбирается более длинная строка.
  16. В функции Path(x,y,mm) выводится путь к максимальному числу.
  17. Значения i, j, k, n устанавливаются равными 1.
  18. Цикл перебирает все возможные комбинации i, j, k, n от 1 до 3.
  19. Если элемент m[i,j] больше максимального элемента в текущей комбинации, то значения i, j, k, n обновляются.
  20. В функции Path(x,y,mm) перебираются все возможные комбинации путей (вверх, вниз, влево, вправо) от текущей позиции x, y и строится путь к максимальному числу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы