если будете сдавать в тестирующей системе, то вместо string, лучше использовать массив char - работает быстрее.
var n,i,k,p,mx,mxj: integer;
s: array[1..100000] of char;
begin
readln(n);
for i: =1 to n do read(s[i]);
k: =0; p: =0;
mx: =0; mxj: =0;
for i: =1 to n do
begin
if s[i]='g' then k: =k+1
else
begin
if p=1 then
begin
p: =0;
if s[i-1]='g' then
if (k> mxj) then mxj: =k;
k: =0;
end
else
begin
if k> 0 then p: =1;
if k> mx then mx: =k;
end;
end;
end;
if mx> mxj then k: =mx+1
else k: =mxj+1;
if k=1 then k: =0;
writeln(k);
end.
нам дана строка из двух слов. например, 'ah-ha nanana'. сначала найдем индекс пробела в этой строке. это делает функция pos(s1, s). она возвращает первый встретившийся индекс подстроки s1 в строке s. если мы вызовем pos(' ', 'ah-ha nanana'), она вернет 6. сохраним это значение в переменную space.
функция copy(s, pos, n) возвращает подстроку строки s из n символов, которая начинается в pos. для копирования первого слова нам нужно взять подстроку, которая начинается с первого символа и имеет длину space-1. под номером space в строке находится пробел, а в space+1 - начало второго слова.
таким образом, copy('ah-ha nanana', 1, space-1) вернет 'ah-ha', а copy('ah-ha nanana', space+1, length('ah-ha nanana')-space) - 'nanana'.
var
s, s1, s2: string;
space: longint;
begin
readln(s);
space : = pos(' ', s);
s1 : = copy(s, 1, space - 1);
s2 : = copy(s, space + 1, length(s) - space);
s : = s2 + ' ' + s1;
writeln(s);
end.
2.предположим, что первая введенная строка - самая длинная. если вторая строка длиннее первой, изменим ответ. если третья строка длиннее самой длинной из первых двух, изменим ответ.
примечание: в переменной s мы сначала храним первую введенную строку, а после ввода - максимальную. если нужно сохранить первую введенную строку, лучше хранить максимальную в отдельной переменной.
var
s, s1, s2: string;
begin
readln(s);
readln(s1);
readln(s2);
if length(s1) > length(s) then s : = s1;
if length(s2) > length(s) then s : = s2;
writeln(s);
end.
Поделитесь своими знаниями, ответьте на вопрос: