Задача 4 Урок 18
Primary tabs
Дан текстовый файл, в котором с в ASCII-стиле нарисованы цепочки из цифр, которые связаны по горизонтали и вертикали.
Все цепочки составляют одно дерево, которое устроено так:
всегда есть общий корень и это цифра
по горизонтали цепочка не разрывается пробелами, соединяется же с помощью последовательностей знака - (тире).
по вертикали цепочка не разрывается переносом строк, соединяется же с помощью вертикальных последовательностей символа | (вертикального разделителя).
Размер схемы не более чем 100 на 100 символов.Примеры:
1------4--------------5-------6--------7 | | | |-------5---------8 | |-------6--------7--7-------9------8---1----5---3Ответ: 10
1------4------8--------5-------6--------7 | | | | | |-------5---------8 | | | |--------8-8-8---8----8 | |-------6--------7--7 |--------------5-5--5--5Ответ: 8
var i,m,z, k, max, countNum : integer; s,f,firstStr : string; f1:text; filename: string; //f - три состояния флага(уменьшает кол-во лишних итераций) //firstStr - певая строка(ствол) //z - ограничитель счетчика цикла для ствола и старт для веток procedure getMaxNummHorisontal(s: string; var max: integer; firstStr: string); // поиск max begin countNum := 0; for i := 1 to length(s) do begin if((s[i] = '|') and (s[i+1] = '-')) then begin f := 'sVetkoy'; z := i; // ограничитель счета по стволу end else if(s[1] = '1') then begin f := 'bezVetok'; z := length(s); // ограничитель счета по стволу end else f := 'pysto'; if(f <> 'pysto') then // если сначала не пусто то посчитать длину ствола for m := 1 to z do // подсчет по стволу с заданым ограничением z if((firstStr[m] >= '0') and (firstStr[m] <= '9')) then countNum := countNum + 1; if(f = 'sVetkoy') then // если нужно посчитать длину веток for m := z to length(s) do if((s[m] >= '0') and (s[m] <= '9')) then countNum := countNum + 1; if(countNum > max) then // поиск максимума перезаписью begin max := countNum; break; end else if(f = 'sVetkoy') then //выйти после того как цикл пробежал по ветке break; end; end; begin 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); if(k = 0) then firstStr := s; // сохраним первую строку(ствол для дальнейших расчетов) getMaxNummHorisontal(s,max,firstStr); k:=k+1; end; writeln(max); readln(); end.
- Log in to post comments
- 1086 reads
vedro-compota
Sun, 10/03/2021 - 12:41
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)