Необходимо написать программу ** Паскале, которая будет удалять из строки все стоящие...

0 голосов
30 просмотров

Необходимо написать программу на Паскале, которая будет удалять из строки все стоящие подряд одинаковые элементы, если их больше 2. Примеры: aabbbc -> aac;
aabbbac -> c;


Информатика (76 баллов) | 30 просмотров
0

"будет удалять из строки все стоящие подряд одинаковые элементы, если их больше 2". aabbbac -> c; Куда делись a? Ведь кол-во подряд идущих a не больше 2, или считается кол-во всех а в строке? Тогда зачем писать о том что удаляются подряд стоящие элементы? Пример правильно подобран? Если кол-во а в строке больше двух (не важно подряд идущие они или нет) , то они удаляются? Этот вывод можно сделать из последнего примера, в задаче, как понял речь о другом.

0

При удалении bbb aa и ac сдвигаются и получается aaac

Дано ответов: 2
0 голосов
Правильный ответ

Var s:string; c:char; i:integer;
begin
write('s = '); readln(s);
i:=1;
while (i+2<=length(s)) do<br> if(s[i]=s[i+1])and(s[i+1]=s[i+2])
  then begin
        c:=s[i];
       while (i<=length(s))and(c=s[i]) do delete(s,i,1);<br>       i:=1;
       end
  else i:=i+1;
writeln(s);
end.

(194k баллов)
0

Было бы не плохо, если бы ваша программа удаляла символы, если их больше 3

0 голосов

Рекурсивный подход.(Символы тоже удаляет)
function grad(s:string):string;
var
i:byte;
detect:boolean;
begin
while i < length(s) - 2 do
begin
inc(i);
if (s[i] = s[i+1]) and (s[i] = s[i+2]) then {проверка последовательности из 3 елементов}
begin
delete(s,i,3); {если да - удаляем их}
detect:=True; {логическая переменная регистрирует изменение строки}
end;end;
if detect = True then
s:=grad(s); {если строку изменили , проверяем не появились ли там еще последовальности}
grad:=s; 
end;

var
s:string;
begin
readln(s);
writeln(grad(s));
end.

(2.2k баллов)