Задача про линию шариков (удаление со сдвигом 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 или более одинаковых шариков подряд. Вот список элементов кода с номерами порядка:
- 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; - Объявление переменной для использования в цикле
- 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;
- if (Len = 0) or (Balls[Len].Color <> c) then - Проверка на начало новой строки
- begin
- Inc(Len); - Увеличение количества шариков в текущей строке
- Balls[Len].Color := c; - Установка цвета текущего шарика
- Balls[Len].Count := 1; - Установка количества текущего шарика
- end
- else
- begin
- Inc(Balls[Len].Count); - Увеличение количества текущего шарика
- end;
- end;
- readln; - Чтение конца ввода
- if (Len > 0) and (Balls[Len].Count >= 3) then - Проверка на последний ряд
- begin
- Count := Count + Balls[Len].Count; - Увеличение количества удаленных шариков
- Dec(Len); - Уменьшение количества шариков в текущей строке
- end;
- writeln(Count); - Вывод количества удаленных шариков
- end. - Конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д