Задача 3 Урок 18
Primary tabs
Имеется текстовый файл в котором содержится не более 30 строк, в каждой строке не более 30 символов (пробелы тоже считаются символами). Цифры и другие символы перемешаны в каждой строке.
Задание: найдите максимальное число, c учетом того, что числом считаются подряд идущие цифры не только по горизонтали, но и по вертикали.Примеры:
fsd334rgd rfg46gdfg ter5tge56 123gergfОтвет: 345
fsd334rgd r fg ter5tge56 123gergfОтвет: 334
fsd334rgd r16hyj3f7 23tge6f57 123gergf7Ответ: 777
\|/ -->*<-- /o\ /_\_\ /_/_0_\ /_o_\_\_\ /_/_/_/_/o\ /@\_\_\@\_\_\ /_/_/O/_/_/_/_\ /_\_\_\_\_\o\_\_\ /_/0/_/_/20_/_/@/_\ /_\_\_\_\_0_\_\_\_\_\ /_/o/_/_/@/2/_/o/_/0/_\ [_1_]Ответ: 2021
ПРИМЕЧАНИЕ: задача взята из списка соревнования IFF 2020
// алгоритм -найдем мах из строк. -преобразуем по очереди каждую вертикальную строку в горизонтальную попутно ища там больший мах type typeStrHorisontalArr = array [1..30] of string; var i,m,z, k, maxHorisont, maxLengthSting, Code, numInt: integer; s, mumStr: string; f: boolean; strHorisontalArr : typeStrHorisontalArr; f1:text; filename: string; procedure getMaxNummHorisontal(s: string; var maxHorisont: integer); // поиск max begin mumStr := ''; if(length(s) > maxLengthSting) then // поиск самой длинной строки maxLengthSting := length(s); for i := 1 to length(s) do begin if((s[i] >= '0') and (s[i] <= '9')) then begin f:=false; // нельзя делать запись в интегер mumStr:=mumStr + s[i]; end else f:=true; // числа закончились, делаем дальше запись в интегер if((f) and (mumStr <> '') or (i=length(s))) then //(i=length(s)) если число в конце и ему не хватит итераций на запись в интегер begin Val(mumStr, numInt, Code); mumStr := ''; f:=false; if(numInt > maxHorisont) then // если новое число больше старого maxHorisont:=numInt; end; end; end; begin maxLengthSting := -1; // мах длина строки в файле maxHorisont := -1; // мах число по горизонту k:=0; // индексирует массив filename := 'C:\Users\Gomynkyl\AppData\Local\Temp\input.txt'; assign(f1, filename); reset(f1); while not eof(f1) do begin readln(f1, s); getMaxNummHorisontal(s,maxHorisont); k:=k+1; strHorisontalArr[k] := s; // запись всех строк в массив чтобы потом не обращаться к файлу а работать с массиовм end; for z:=1 to maxLengthSting do //цикл где записываем вертикальную строку в горизонтальную begin s :=''; for m:=1 to k do begin s := s + strHorisontalArr[m][z]; end; getMaxNummHorisontal(s,maxHorisont); // отправляем получившуюся строку на проверку end; writeln(maxHorisont); readln(); end.
- Log in to post comments
- 720 reads
vedro-compota
Sun, 10/03/2021 - 12:39
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)