Найти максимальное количество бусинок одного цвета, идущих подряд - PascalABC.NET
Формулировка задачи:
Решение задачи: «Найти максимальное количество бусинок одного цвета, идущих подряд»
procedure Examen(curCount : Integer; curColor : Char;
var maxCount : Integer; var maxColor : Char);
begin
if (curCount > maxCount) or ((curCount = maxCount) and (maxColor > curColor)) then
begin
maxCount := curCount; maxColor := curColor;
end;
end;
begin
var S := System.IO.File.ReadAllText('input.txt');
var fstCount := 0; var allChanges := -1; // Количество первых и сколько раз менялся цвет
var maxCount := 0; var maxColor := '9';
var curCount := 0; var curColor := '9';
for var i := 1 to S.Length do
if curColor <> S[i] then
begin
if allChanges = 1 then fstCount := curCount; // Количество первых
allChanges += 1; // Смена цвета номер...
Examen(curCount, curColor, maxCount, maxColor);
curCount := 1; curColor := S[i];
end
else
curCount += 1;
if (allChanges > 0) and (S[1] = curColor) then curCount += fstCount; // Первый + последний, если цвета совпадают
Examen(curCount, curColor, maxCount, maxColor);
System.IO.File.WriteAllText('output.txt', maxCount.ToString + #32 + maxColor);
WriteLn(maxCount.ToString + #32 + maxColor);
end.
Объяснение кода листинга программы
В этом коде используется процедура Examen, которая сравнивает текущее количество бусин (переменная curCount) и текущий цвет (переменная curColor) с максимальным количеством бусин и цветом (переменные maxCount и maxColor). Если текущее количество бусин больше максимального или если текущий цвет равен максимальному цвету, то максимальное количество бусин и цвет обновляются.
Код также использует цикл for для чтения строки из файла input.txt по одному символу за раз. Если текущий символ не равен текущему цвету, то код проверяет, была ли смена цвета. Если да, то количество первых бусин сохраняется, переменная allChanges увеличивается на 1, вызывается процедура Examen, и счетчик бусин и цвет сбрасываются. Если текущий символ равен текущему цвету, то счетчик бусин увеличивается.
После прочтения всех символов в строке, код проверяет, была ли смена цвета. Если да, и первый и последний символы совпадают с текущим цветом, то количество первых бусин добавляется к текущему количеству бусин. Затем вызывается процедура Examen и записывается результат в файл output.txt.
В конце кода выводится максимальное количество бусин и цвет на экран.