Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле - 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.
Объяснение кода листинга программы
- Объявлена матрица m размером 3x3 типа tAr, элементы которой принимают значения от 1 до 9.
- В цикле перебираются все возможные комбинации i, j, k, n от 1 до 3.
- Если элемент m[i,j] больше максимального элемента в текущей комбинации, то значения i, j, k, n обновляются.
- В функции Path(x,y,mm) перебираются все возможные комбинации путей (вверх, вниз, влево, вправо) от текущей позиции x, y и строится путь к максимальному числу.
- В функции MaxSt(s1,s2) сравниваются строки s1 и s2. Если они равны по длине, то выбирается более длинная. Если они не равны по длине, то выбирается более длинная строка.
- В цикле перебираются все возможные комбинации i, j, k, n от 1 до 3.
- Если элемент m[i,j] больше максимального элемента в текущей комбинации, то значения i, j, k, n обновляются.
- В функции Path(x,y,mm) перебираются все возможные комбинации путей (вверх, вниз, влево, вправо) от текущей позиции x, y и строится путь к максимальному числу.
- В функции MaxSt(s1,s2) сравниваются строки s1 и s2. Если они равны по длине, то выбирается более длинная. Если они не равны по длине, то выбирается более длинная строка.
- В функции Path(x,y,mm) выводится путь к максимальному числу.
- Значения i, j, k, n устанавливаются равными 1.
- Цикл перебирает все возможные комбинации i, j, k, n от 1 до 3.
- Если элемент m[i,j] больше максимального элемента в текущей комбинации, то значения i, j, k, n обновляются.
- В функции Path(x,y,mm) перебираются все возможные комбинации путей (вверх, вниз, влево, вправо) от текущей позиции x, y и строится путь к максимальному числу.
- В функции MaxSt(s1,s2) сравниваются строки s1 и s2. Если они равны по длине, то выбирается более длинная. Если они не равны по длине, то выбирается более длинная строка.
- В функции Path(x,y,mm) выводится путь к максимальному числу.
- Значения i, j, k, n устанавливаются равными 1.
- Цикл перебирает все возможные комбинации i, j, k, n от 1 до 3.
- Если элемент m[i,j] больше максимального элемента в текущей комбинации, то значения i, j, k, n обновляются.
- В функции Path(x,y,mm) перебираются все возможные комбинации путей (вверх, вниз, влево, вправо) от текущей позиции x, y и строится путь к максимальному числу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д