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

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

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

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

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

textual
Листинг программы
  1. procedure Examen(curCount : Integer; curColor : Char;
  2.           var maxCount : Integer; var maxColor : Char);
  3. begin
  4.   if (curCount > maxCount) or ((curCount = maxCount) and (maxColor > curColor)) then
  5.     begin
  6.       maxCount := curCount; maxColor := curColor;
  7.     end;
  8. end;
  9.  
  10. begin
  11.   var S := System.IO.File.ReadAllText('input.txt');
  12.   var fstCount := 0; var allChanges := -1; // Количество первых и сколько раз менялся цвет
  13.   var maxCount := 0; var maxColor := '9';
  14.   var curCount := 0; var curColor := '9';
  15.   for var i := 1 to S.Length do
  16.     if curColor <> S[i] then
  17.       begin
  18.         if allChanges = 1 then fstCount := curCount; // Количество первых
  19.         allChanges += 1; // Смена цвета номер...
  20.        
  21.         Examen(curCount, curColor, maxCount, maxColor);
  22.         curCount := 1; curColor := S[i];
  23.       end
  24.     else
  25.       curCount += 1;
  26.   if (allChanges > 0) and (S[1] = curColor) then curCount += fstCount; // Первый + последний, если цвета совпадают
  27.   Examen(curCount, curColor, maxCount, maxColor);
  28.   System.IO.File.WriteAllText('output.txt', maxCount.ToString + #32 + maxColor);
  29.   WriteLn(maxCount.ToString + #32 + maxColor);
  30. end.

Объяснение кода листинга программы

В этом коде используется процедура Examen, которая сравнивает текущее количество бусин (переменная curCount) и текущий цвет (переменная curColor) с максимальным количеством бусин и цветом (переменные maxCount и maxColor). Если текущее количество бусин больше максимального или если текущий цвет равен максимальному цвету, то максимальное количество бусин и цвет обновляются. Код также использует цикл for для чтения строки из файла input.txt по одному символу за раз. Если текущий символ не равен текущему цвету, то код проверяет, была ли смена цвета. Если да, то количество первых бусин сохраняется, переменная allChanges увеличивается на 1, вызывается процедура Examen, и счетчик бусин и цвет сбрасываются. Если текущий символ равен текущему цвету, то счетчик бусин увеличивается. После прочтения всех символов в строке, код проверяет, была ли смена цвета. Если да, и первый и последний символы совпадают с текущим цветом, то количество первых бусин добавляется к текущему количеству бусин. Затем вызывается процедура Examen и записывается результат в файл output.txt. В конце кода выводится максимальное количество бусин и цвет на экран.

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


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

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

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы