Содержание:
ЕГЭ по информатике 24 задание объяснение
Уровень сложности — повышенный,
Требуется использование специализированного программного обеспечения — нет,
Максимальный балл — 1,
Примерное время выполнения — 8 минут.
Проверяемые элементы содержания: Умение создавать собственные программы (10–20 строк) для обработки символьной информации
Выполнение 24 задания ЕГЭ
Плейлист видеоразборов задания на YouTube:
Задание демонстрационного варианта 2022 года ФИПИ
Последовательности (цепочки) символов
Текстовый файл состоит не более чем из 106 символов X, Y и Z.
Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
Для выполнения этого задания следует написать программу.
Ответ: 35
✍ Решение:
-
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | var f: text; i, k, max: integer; s: string; begin assign(f, 'D:\24.txt'); reset(f); readln(f, s); max := 1; k := 1; // кол-во подряд идущих for i := 2 to length(s) do begin if s[i] <> s[i - 1] then begin inc(k); if k > max then max := k; end else k := 1; end; write(max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 | f=open('D:/24.txt') s=f.readline() m=1 k=1 for i in range(1,len(s)): if s[i]!=s[i-1]: k+=1 m=max(k,m) else: k=1 print(m) |
📹 Видеоразбор:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
В текстовом файле (выше по ссылке) находится цепочка из символов латинского алфавита A, B, C.
Найдите длину самой длинной подцепочки, состоящей из символов C.
Ответ: 0
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 | begin assign(input, 'k7-0.txt'); var s: string; var c: string; read(s); c := 'C'; while c in s do c := c + 'C'; print(length(c) - 1) end. |
Python:
способ 1:
1 2 3 4 5 6 7 8 | with open("k7-0.txt") as Fin: s = Fin.readline() c = 'C' while c in s: # ищем CC, потом CCC и т.д c += 'C' print(len(c)-1 ) # минус 1, чтобы убрать лишнюю (последнюю добавленную С) |
способ 2:
1 2 3 4 5 6 7 8 9 10 11 | f=open('k7-0.txt') s = f.readline() # считали строку m = 0 # макс длина цепочки l = 0 # начальная длина цепочки for i in range(0,len(s)): if s[i]=='C': l+=1 m = max(l,m) # перезаписали Макс длину else: l = 0 # сбрасываем счетчик print(m) |
В текстовом файле (выше по ссылке) находится цепочка из символов латинского алфавита A, B, C, D, E.
Найдите длину самой длинной подцепочки, состоящей из символов A, B или C (в произвольном порядке).
Ответ: 16
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | begin assign(input, 'k7a-1.txt'); var s: string; read(s); var k := 0; var maxim := 0; for var i := 1 to length(s) do if s[i] in 'ABC' then begin k += 1; if k > maxim then maxim := k end else k := 0 ; write(maxim) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 | f = open('k7a-1.txt') s = f.readline() # считали строку m = 0 # макс длина цепочки из "A,B,С" l = 0 # начальная длина цепочки из "A,B,С" for i in range(0,len(s)): if s[i] in'ABC': l+=1 m = max(l,m) # перезаписали Макс длину else: l = 0 # другая буква - сбрасываем счетчик print(m) |
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E, F.
Найдите длину самой длинной подцепочки, не содержащей гласных букв.
Ответ: 20
✍ Решение:
-
PascalABC.net:
Вариант 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | begin assign(input, 'k7a-6.txt'); var s: string; read(s); var k := 0; var maxim := 0; for var i := 1 to length(s) do if s[i] in 'BCDF' then begin k += 1; if k > maxim then maxim := k end else k := 0 ; write(maxim) end. |
Вариант 2:
1 2 3 4 5 6 7 8 9 10 11 12 | begin var s := readAllText('d:\k7a-6.txt').Trim; var (k, max) := (0, 0); foreach var c in s do if not (c in 'AE') then begin k += 1; if k > max then max := k; end else k := 0; print(max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 | with open("k7a-6.txt") as F: s = F.readline() # считали строку k = 0 # начальная длина цепочки из "B,C,D,F" Max = 0 # макс длина цепочки из "B,C,D,F" for c in s: if c in 'BCDF': k += 1 if k > Max: Max = k # перезаписали Макс длину else: k = 0 # другая буква - сбрасываем счетчик print(Max) |
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E.
Найдите максимальную длину цепочки вида EABEABEABE… (состоящей из фрагментов EAB, последний фрагмент может быть неполным).
Ответ: 7
✍ Решение:
-
PascalABC.net:
- 1 тип = ..EABE — неполный последний фрагмент
- 2 тип = ..EABEB — неполный последний фрагмент
- 3 тип = ..EAB — полный последний фрагмент
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | begin assign(input, 'k7b-1.txt'); var s: string; read(s); var c := 'EAB'; while c in s do begin if c[length(c)] = 'B' then c += 'E' else if c[length(c)] = 'A' then c += 'B' else if c[length(c)] = 'E' then c += 'A'; end; print(length(c) - 1) end. |
Python:
Способ 1:
1 2 3 4 5 6 7 8 9 | with open("k7b-1.txt") as Fin: s = Fin.readline() c = 'EAB' while c in s: # ищем EAB, потом EABE и т.д if c[-1]=="B": c +="E" elif c[-1]=="A": c +="B" elif c[-1]=="E": c +="A" print(len(c)-1) |
Способ 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | f=open('k7b-1.txt') s = f.readline() m = 0 i = 0 for char in s: if (char == 'E' and i%3 == 0) or \ (char == 'A' and i%3 == 1) or \ (char == 'B'and i%3 == 2): i += 1 m = max(i,m) elif char == 'E': i = 1 else: i = 0 print(m) |
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E.
Найдите количество цепочек длины 3, удовлетворяющих следующим условиям:
Ответ: 1280
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | begin assign(input, 'k7c-1.txt'); var s: string; read(s); // весь текст файла var k := 0; var c1 := 'BCD'; var c2 := 'BDE'; var c3 := 'BCE'; for var i := 1 to length(s) - 2 do begin if (s[i] in c1) and (s[i + 1] in c2) and (s[i + 2] in c3) and (s[i] <> s[i + 1]) and (s[i + 1] <> s[i + 2]) then k += 1 end; print(k) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 | with open("k7c-1.txt") as Fin: s = Fin.readline() k = 0 c1 = 'BCD'# строка проверки первого символа c2 = 'BDE'# строка проверки второго символа c3 = 'BCE'# строка проверки третьего символа for i in range(len(s)-2): if s[i] in c1 and s[i+1] in c2 and s[i+2] in c3 \ and s[i]!=s[i+1] and s[i+1]!=s[i+2]: # проверка повтора символов k += 1 print(k) |
В текстовом файле (по ссылке выше) находится цепочка из символов, в которую могут входить заглавные буквы латинского алфавита A…Z
и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из одинаковых символов. Если в файле несколько цепочек одинаковой длины, нужно взять первую из них. Выведите сначала символ, из которого строится эта подцепочка, а затем через пробел – длину этой подцепочки.
Ответ: 2 3
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | begin assign(input, 'D:/k8-0.txt'); var s: string; read(s); // весь текст файла var k := 1; //длина текущей цепочки одинаковых символов var max := 0; // макс длина цепочки одинаковых символов var c := s[1]; //символ, из которого строится самая длинная подцепочка for var i := 1 to length(s) - 1 do begin if s[i] = s[i + 1] then begin k += 1; if k > max then begin max := k; c := s[i]; // запомнили новый символ end end else k := 1; end; print(c, max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | f=open('k8-0.txt') s=f.readline() k=1 m=0 for i in range (1,len(s)): if s[i]==s[i-1] : k+=1 if k>m: m=k symb=s[i] else: k=1 print(symb,m) |
📹 Видеоразбор:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
Текстовый файл (по ссылке выше) содержит последовательность из строчных и заглавных букв английского алфавита и цифр, всего не более 106 символов. Определите длину наибольшей убывающей подпоследовательности.
Ответ: 3
✍ Решение:
-
Общая идея:
- В цикле сравнивается текущий элемент с предыдущим (цикл начинается со второго символа строки и заканчивается длиной строки).
- Если текущий элемент меньше предыдущего, то последовательность убывает, — увеличиваем счетчик длины последовательности.
- Начальное значение счетчика длины последовательности должно быть = 1, так как в цикле сравниваются два элемента, и при истинности условия в последовательность уже должна быть равна двум, а не единице (в случае если счетчик обнуляется).
- Увеличивая счетчик, сразу же необходимо сравнивать его значение с максимумом, и выполнять переприсваивание максимума, если это требуется.
- В случае, если условие убывающей последовательности ложно, переходим в блок Иначе (
else
) и сбрасываем счетчик для работы со следующей последовательностью. Счетчик присваиваем единице! - После цикла выводим максимальное значение.
for var i := 2 to length(s) do begin if s[i] < s[i - 1] then |
... begin k += 1; |
... if k > max then max := k; |
... else k := 1; |
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | begin assign(input, 'D:/24.txt'); var s: string; read(s); // весь текст файла var k := 1; //длина текущей бывающей последовательности символов var max := 0; // макс длина for var i := 2 to length(s) do begin if s[i] < s[i - 1] then begin k += 1; // увеличиваем счетчик длины последовательности if k > max then max := k; end else k := 1; // сбрасываем счетчик для работы со след. последовательностью end; print(max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 | F= open("24.txt") s = F.readline() # считали строку (весь текст файла в одной строке) k = 1 maxim = 0 for i in range(1, len(s)): if s[i] < s[i - 1]: k += 1 # увеличиваем счетчик длины последовательности if k > maxim: maxim = k else: k = 1 # сбрасываем счетчик для работы со след. последовательностью print(maxim) |
Работа с числами (цифрами) в текстовом файле
Текстовый файл (по ссылке выше) состоит не более чем из 106 символов. Определите максимальное нечётное число, записанное в этом файле.
Ответ: 7642289
✍ Решение:
-
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | begin assign(input, '24-1.txt'); var s: string; var b:integer; read(s); // весь текст файла находится в s var max := 0; // для максимального нечётного числа var num:integer; var strnum:string; // накапливает строковое представление числа strnum:=''; for var i := 1 to length(s)-1 do begin if s[i].IsDigit() then // проверяем очередной символ - цифра ли это strnum += s[i] //добавляем очередную цифру в число else if (strnum <> '') then //если встретилась не цифра, а strnum не пустая строка begin Val(strnum, num, b); // переводим в число if (num mod 2 <> 0) and (num > max) then // условие для поиска макс четного max := num; strnum:=''; // сбрасываем на начальное значение, чтобы накапливать новое число end; end; // проверка на случай, если самое большое нечётное в самом конце строки if (s[length(s)].isdigit()) then begin Val(strnum, num, b); if (num mod 2 <> 0) and (num > max) then max:= num; end; print(max) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | F = open("24-1.txt") s = F.readline() # считали строку strnum = '' #пустая строка, strnum накапливает строковое представление числа maxim = 0 # для максимального нечётного числа for sym in s: if sym.isdigit(): # проверяем очередной символ - цифра ли это strnum += sym # добавляем очередную цифру в число elif strnum: # если встретилась не цифра, а strnum не пустая строка num = int(strnum) # переводим в число и сохраняем в num if num % 2 and num > maxim: # условие для поиска макс четного maxim = num strnum = '' # сбрасываем на начальное значение, чтобы накапливать новое число # проверка на случай, если самое большое нечётное в самом конце строки if s[-1].isdigit(): num = int(strnum) if num % 2 and num > maxim: maxim = num print(maxim) |
Работа с отдельными строками файла
Текстовый файл (по ссылке выше) состоит не более чем из 106 заглавных латинских букв (A..Z
). Текст разбит на строки различной длины.
Определите количество строк, в которых буква J
встречается чаще, чем буква E
.
Ответ: 482
✍ Решение:
-
Общая идея:
- Так как текст разбит на строки, то используем бесконечный цикл для считывания каждой строки.
- Если строка пустая (т.е. достигнут конец файла), используем досрочный выход из цикла (оператор
break
). - Для подсчета количества встреченных символов используем строковый метод
count()
, который возвращает количество найденных вхождений символа (или сочетания символов), заданного аргументом.
PascalABC.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 | begin assign(input, '24-s1.txt'); var s: string; var k := 0; while true do // бесконечный цикл begin readln(s); // считываем очередную строку if s = '' then break; // если строка пустая (т.е. достигнут конец файла), выходим if s.Count(c -> c = 'J') > s.Count(c -> c = 'E') then k += 1; end; print(k) end. |
Python:
1 2 3 4 5 6 7 8 | f= open("24-s1.txt") k = 0 # счетчик строк while True: # бесконечный цикл s = f.readline() # считываем очередную строку if not s: break # если строка пустая (т.е. достигнут конец файла), выходим if s.count("J") > s.count("E"): k +=1 print(k) |
Здравствуйте, подскажите, пожалуйста, что не так. У меня ни ваша программа не работает, ни своя.
Program N2;
var b, a, i : integer;
s: string;
k:text;
begin
s:=’C:\24_demo.txt’;
assign(k, s);
reset(k);
b := 1;
a := 1;
for i:=2 to Length(s) do
if (s[i]=s[i-1]) and (s[i]=’X’) then
begin
a:=a+1;
if b < a then b:=a;
end
else a:=1;
writeln(b);
end.
Своя по нахождение максимального кол-во подряд идущих символов
х. Что не так с программой?
Здравствуйте, в задаче №33 ваша программа
begin
assign(input, ‘Путь к файлу’);
var s: string;
read(s); // весь текст файла
var k := 0;
var c1 := ‘BCD’;
var c2 := ‘BDE’;
var c3 := ‘BCE’;
for var i := 1 to length(s) — 2 do
begin
if (s[i] in c1) and (s[i + 1] in c2) and (s[i + 2] in c3)
and (s[i] s[i + 1]) and (s[i + 1] s[i + 2]) then
k += 1
end;
print(k)
end.
Не работает в паскале (путь изменил на свой, в файл добавил символы из вашего, клоню к тому, что это не ошибка невнимательности)
И хотелось бы узнать( если можно) почему моя программа выдает неправильный результат
var count,numb,i:longint;
s:string;
f:text;
mas:array [1..2] of string;
begin
assign(f,’путь к файлу ‘);
reset(f);
readln(f,s);
count:=1;
for i := 1 to length(s) do begin
if ((s[i]=’B’) or (s[i]=’C’) or (s[i]=’D’)) and (count mod 3 =1 )then begin
mas[1]:=s[i]; inc(count);
end;
if ((s[i]=’B’) or (s[i]=’D’) or (s[i]=’E’)) and (count mod 3 =2) and (s[i]mas[1])then begin
mas[2]:=s[i]; inc(count);
end;
if ((s[i]=’B’) or (s[i]=’C’) or (s[i]=’E’)) and (count mod 3 = 0 ) and (s[i] mas[2])then begin
inc(count); inc(numb);
end;
mas[1]:=default(string);
mas[2]:=default(string);
end;
writeln(numb);
end.
Добро пожаловать
У меня вопрос о динамическом распределении памяти, и я не знаю, как писать код. Вы можете помочь???
Вопрос: Дана строка.
написать программу которая печатает самую короткую последовательность одинаковых символов