Найти максимальное количество бусинок одного цвета, идущих подряд - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста решить задачу: Имеется замкнутое ожерелье, состоящее из бусинок одного из трёх возможных цветов: красного, жёлтого, зелёного. Необходимо найти максимальное количество бусинок одно цвета, идущих подряд. Формат входных данных: В единственной строке входного файла INPUT.TXT находится последовательность из номеров цветов бусинок: 1, 2, 3. В последовательности не более 100 цифр. Цифры записаны подряд без пробелов. Формат выходных данных: Выходной файл OUTPUT.TXT максимальное количество бусинок и номер цвета. Если максимальное количество бусинок одного цвета, идущих подряд равно максимальному количеству бусинок другого цвета, идущих подряд, то выдать меньший номер цвета. Пример Input.txt 222123333111133 Output.txt 4 1

Решение задачи: «Найти максимальное количество бусинок одного цвета, идущих подряд»

textual
Листинг программы
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. В конце кода выводится максимальное количество бусин и цвет на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы