Выведите одно целое число — максимальное число, которое могло получиться в протоколе при игре на данном поле - 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 и строится путь к максимальному числу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д