Напишите программу, которая по данной ситуации определяет, сколько шариков будет сейчас "уничтожено" - Pascal
Формулировка задачи:
Всем доброго времени суток!
В одной компьютерной игре игрок выставляет в линию шарики разных цветов. Когда образуется непрерывная цепочка из трех и более шариков одного цвета, она удаляется из линии. Все шарики при этом сдвигаются друг к другу, и ситуация может повториться.
Напишите программу, которая по данной ситуации определяет, сколько шариков будет сейчас "уничтожено". Естественно, непрерывных цепочек из трех и более одноцветных шаров в начальный момент может быть не более одной.
Помогите, пожалуйста, тут что-то не так:
var MAS:aRRay of LongInt;
N, i:IntegeR;
cur, c1, c2:Byte;
begin
readln(N);
SetLength(MAS, N);
for i:= loW(MAS) to HigH(MAS) do read(MAS[i]);
cur:= MAS[loW(MAS)];
c1:= 1;
c2:= 0;
for i:= loW(MAS) + 1 to HigH(MAS) do
begin
if (MAS[i] = cur) then inc(c1)
else
begin
cur:= MAS[i];
if (c1 > c2) then begin c2:= c1; c1:= 1; end;
end;
end;
if (c1 > c2) then writeln(c1)
else writeln(c2);
end.
Ну или предложите свои решения, только, пожалуйста, на паскале.
Решение задачи: «Напишите программу, которая по данной ситуации определяет, сколько шариков будет сейчас "уничтожено"»
textual
Листинг программы
until(n-i<3)or not f;
Объяснение кода листинга программы
В данном коде происходит следующее:
- Переменная
nпредставляет собой количество шариков, которые уже былиуничтожены. - Переменная
iпредставляет собой количество шариков, которые еще не былиуничтожены. - Переменная
fпредставляет собой флаг, который указывает на то, была ли выполнена последняя итерация цикла. - Выражение
n-i<3проверяет, было ли уничтожено меньше трех шариков. - Оператор
orпроверяет, не было ли выполненоnot f, то есть не была ли выполнена последняя итерация цикла. - Если условие из пункта 4 или пункта 5 истинно, то цикл продолжается.
- Если условие из пункта 4 и пункта 5 ложно, то цикл завершается и переменная
fустанавливается в значениеtrue.