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

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

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

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

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

textual
Листинг программы
Type tAr = array[1..3,1..3] of Byte;
Var          { 987456321 987236145 897236145 987236145 }
  m   : tAr := ((1,2,3),
                (4,5,6),
                (7,8,9)); 
             { ((1,6,3),
                (4,7,2),
                (5,8,9)); }
             { ((1,6,3),
                (4,7,2),
                (5,9,8)); }
             { ((1,6,3),
                (4,9,2),
                (5,8,7)); }
  i,j,k,n : Byte;
 
Function MaxSt(s1,s2 : String) : String;
Begin
  If Length(s1)=Length(s2) then
    If s1>s2 then MaxSt:=s1 else MaxSt:=s2
  else
    If Length(s1)>Length(s2) then MaxSt:=s1 else MaxSt:=s2;
end;
 
Function Path(x,y : Integer; mm : tAr) : String;
Var b    : Char;
Begin
  If (x in [1..3]) and (y in [1..3]) and (mm[x,y]>0) then
  Begin
    b:=Chr(Ord('0')+mm[x,y]);
    mm[x,y]:=0;
    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)));
  end
  else Path:='';
end;
 
Begin
  k:=1; n:=1;
  For i:=1 to 3 do
   For j:=1 to 3 do
     If (m[i,j]>m[k,n]) and (not ((i+j) in [3,5])) then
     Begin
       k:=i; n:=j;
     end;
  Writeln(Path(k,n,m));
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
Похожие ответы