Задача про линию шариков (удаление со сдвигом 3х и более одинаковых подряд идущих) - PascalABC.NET

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

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

В одной компьютерной игре игрок выставляет в линию шарики разных цветов. Когда образуется непрерывная цепочка из трех и более шариков одного цвета, она удаляется из линии. Все шарики при этом сдвигаются друг к другу, и ситуация может повториться. Напишите программу, которая по данной ситуации определяет, сколько шариков будет сейчас уничтожено. Естественно, непрерывных цепочек из трех и более одноцветных шаров в начальный может быть не более одной. Входные данные Сначала вводится количество шариков в цепочке (не более 100) и цвета шариков (от 0 до 9, каждому цвету соответствует свое целое число). Выходные данные Требуется вывести кол-во шариков, которое будет уничтожено.
Может кто помочь?

Решение задачи: «Задача про линию шариков (удаление со сдвигом 3х и более одинаковых подряд идущих)»

textual
Листинг программы
program Lines;
 
const
  NMax = 100;
type
  TBalls = record
    Color: integer;
    Count: integer;
  end;
  TLines = array[1..NMax] of TBalls;
 
var
  n, c, Count: integer;
  Balls: TLines;
  Len: integer;
  i: integer;
begin
  Count := 0;
  Len := 0;
  Read(n);
  for i := 1 to n do
  begin
    Read(c);
    if (Len > 0) and (Balls[Len].Color <> c) then
    begin
      if Balls[Len].Count >= 3 then
      begin
        Count := Count + Balls[Len].Count;
        Dec(Len);
      end;
    end;
    if (Len = 0) or (Balls[Len].Color <> c) then
    begin
      Inc(Len);
      Balls[Len].Color := c;
      Balls[Len].Count := 1;
    end
    else
      Inc(Balls[Len].Count);
  end;
  readln;
  if (Len > 0) and (Balls[Len].Count >= 3) then
  begin
    Count := Count + Balls[Len].Count;
    Dec(Len);
  end;
  writeln(Count);
end.

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

В этом коде выполняется задача, описанная в вашем вопросе: удаляются строки из строк, состоящих из одинаковых шариков, если они состоят из 3 или более одинаковых шариков подряд. Вот список элементов кода с номерами порядка:

  1. program Lines; - Заголовок программы
  2. const NMax = 100; - Максимальное количество шариков в строке
  3. type TBalls = record Color: integer; Count: integer; end; - Определение структуры для хранения информации о шарике
  4. TLines = array[1..NMax] of TBalls; - Определение массива для хранения информации о шариках
  5. var n, c, Count: integer; - Объявление переменных для хранения количества шариков и их цвета
  6. Balls: TLines; - Объявление переменной для хранения массива шариков
  7. Len: integer; - Объявление переменной для хранения количества шариков в текущей строке
  8. i: integer; - Объявление переменной для использования в цикле
  9. Count := 0; - Инициализация переменной для хранения количества удаленных шариков
  10. Len := 0; - Инициализация переменной для хранения количества шариков в текущей строке
  11. Read(n); - Чтение количества строк из ввода
  12. for i := 1 to n do - Цикл по строкам
  13. begin
  14. Read(c); - Чтение цвета текущего шарика
  15. if (Len > 0) and (Balls[Len].Color <> c) then - Проверка на удаление шариков
  16. begin
  17. if Balls[Len].Count >= 3 then - Проверка на количество шариков
  18. begin
  19. Count := Count + Balls[Len].Count; - Увеличение количества удаленных шариков
  20. Dec(Len); - Уменьшение количества шариков в текущей строке
  21. end;
  22. if (Len = 0) or (Balls[Len].Color <> c) then - Проверка на начало новой строки
  23. begin
  24. Inc(Len); - Увеличение количества шариков в текущей строке
  25. Balls[Len].Color := c; - Установка цвета текущего шарика
  26. Balls[Len].Count := 1; - Установка количества текущего шарика
  27. end
  28. else
  29. begin
  30. Inc(Balls[Len].Count); - Увеличение количества текущего шарика
  31. end;
  32. end;
  33. readln; - Чтение конца ввода
  34. if (Len > 0) and (Balls[Len].Count >= 3) then - Проверка на последний ряд
  35. begin
  36. Count := Count + Balls[Len].Count; - Увеличение количества удаленных шариков
  37. Dec(Len); - Уменьшение количества шариков в текущей строке
  38. end;
  39. writeln(Count); - Вывод количества удаленных шариков
  40. end. - Конец программы

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


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

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

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