Всего: 526 1–20 | 21–40 | 41–60 | 61–80 …
Добавить в вариант
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 365 S = S + 36 N = N + 7 WEND PRINT N |
var n, s: integer; begin n := 0; s := 0; while s <= 365 do begin s := s + 36; n := n + 7 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 365) { s = s + 36; n = n + 7; } cout « n « endl; } |
алг нач цел n, s n := 0 s := 0 нц пока s <= 365 s := s + 36 n := n + 7 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 365: s += 36 n += 7 print(n) |
Запишите число, которое будет напечатано в результате выполнения следующей программы. Для Вашего удобства программа представлена на пяти языках программирования.
| Бейсик | Python |
|---|---|
|
DIM S, N AS INTEGER S = 80 N = 0 WHILE S + N < 150 S = S − 5 N = N + 15 WEND PRINT N |
s = 80 n = 0 while s + n < 150: s = s − 5 n = n + 15 print(n) |
| Паскаль | Алгоритмический язык |
|
var s, n: integer; begin s := 80; n := 0; while s + n < 150 do begin s := s − 5; n := n + 15; end; writeln(n) end. |
алг нач цел s, n s := 80 n := 0 нц пока s + n < 150 s := s − 5 n := n + 15 кц вывод n кон |
| Си++ | |
|
#include <iostream> using namespace std; int main() { int s = 80, n = 0; while (s + n < 150) { s = s − 5; n = n + 15; } cout << n; return 0; } |
Источник: ЕГЭ по информатике 28.05.2018. Основная волна, вариант А. Имаева — «Котолис».
Определите, что будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 365 S = S + 33 N = N + 10 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 0; while s <= 365 do begin s : = s + 33; n : = n + 10 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 365) { s = s + 33; n = n + 10; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 0 нц пока s <= 365 s : = s + 33 n : = n + 10 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 365: s += 33 n += 10 print(n) |
Определите, что будет напечатано в результате выполнения следующей программы (записанной ниже на разных языках программирования):
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 While S <= 365 S = S + 36 N = N + 5 WEND PRINT N |
var n, s : integer; begin n := 0; s := 0; while s <= 365 do begin s := s + 36; n := n + 5 end; write(n); end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main () { int n, s; n = 0; s = 0; while (s <= 365) { s = s + 36; n = n + 5; } cout « n « endl; } |
алг нач цел n, s n := 0 s := 0 нц пока s <= 365 s := s + 36; n := n + 5; кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 365: s += 36 n += 5 print(n) |
Определите, что будет напечатано в результате выполнения следующей программы (записанной ниже на разных языках программирования):
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 While S <= 365 S = S + 36 N = N + 10 WEND PRINT N |
var n, s : integer; begin n := 0; s := 0; while s <= 365 do begin s := s + 36; n := n + 10 end; write(n); end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main () { int n, s; n = 0; s = 0; while (s <= 365) { s = s + 36; n = n + 10; } cout « n « endl; } |
алг нач цел n, s n := 0 s := 0 нц пока s <= 365 s := s + 36; n := n + 10; кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 365: s += 36 n += 10 print(n) |
Определите, что будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 30 S = 25 WHILE S < 425 S = S + 40 N = N + 10 WEND PRINT N |
var n, s: integer; begin n : = 30; s : = 25; while s < 425 do begin s : = s + 40; n : = n + 10 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 30; s = 25; while (s < 425) { s = s + 40; n = n + 10; } cout « n « endl; } |
алг нач цел n, s n : = 30 s : = 25 нц пока s < 425 s : = s + 40 n : = n + 10 кц вывод n кон |
| Python | |
|
n = 30 s = 25 while s < 425: s += 40 n += 10 print(n) |
Определите, что будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования):
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 60 S = 25 WHILE S < 365 S = S + 20 N = N + 10 WEND PRINT N |
var n, s: integer; begin n : = 60; s : = 25; while s < 365 do begin s : = s + 20; n : = n + 10 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 60; s = 25; while (s < 365) { s = s + 20; n = n + 10; } cout « n « endl; } |
алг нач цел n, s n : = 60 s : = 25 нц пока s < 365 s : = s + 20 n : = n + 10 кц вывод n кон |
| Python | |
|
n = 60 s = 25 while s < 365: s += 20 n += 10 print(n) |
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования):
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 257 S = S + 10 N = N + 3 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 0; while s <= 257 do begin s := s + 10; n := n + 3 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 257) { s = s + 10; n = n + 3; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 0 нц пока s <= 257 s := s + 10 n := n + 3 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 257: s += 10 n += 3 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 1.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования):
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 257 S = S + 25 N = N + 4 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 0; while s <= 257 do begin s : = s + 25; n : = n + 4 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 257) { s = s + 25; n = n + 4; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 0 нц пока s <= 257 s : = s + 25 n : = n + 4 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 257: s += 25 n += 4 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 2.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 325 S = S + 10 N = N + 3 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 0; while s <= 325 do begin s : = s + 10; n : = n + 3 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 325) { s = s + 10; n = n + 3; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 0 нц пока s <= 325 s : = s + 10 n : = n + 3 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 325: s += 10 n += 3 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 1.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 257 S = S + 10 N = N + 3 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 0; while s <= 257 do begin s : = s + 10; n : = n + 3 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 257) { s = s + 10; n = n + 3; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 0 нц пока s <= 257 s : = s + 10 n : = n + 3 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 257: s += 10 n += 3 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 5.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 249 S = S + 24 N = N + 3 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 0; while s <= 249 do begin s : = s + 24; n : = n + 3 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 249) { s = s + 24; n = n + 3; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 0 нц пока s <= 249 s : = s + 24 n : = n + 3 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 249: s += 24 n += 3 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Сибирь. Вариант 3.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 256 S = S + 25 N = N + 5 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 0; while s <= 256 do begin s : = s + 25; n : = n + 5 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 256) { s = s + 25; n = n + 5; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 0 нц пока s <= 256 s : = s + 25 n : = n + 5 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 256: s += 25 n += 5 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 2.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования):
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 512 S = S + 25 N = N + 4 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 0; while s <= 512 do begin s : = s + 25; n : = n + 4 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 512) { s = s + 25; n = n + 4; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 0 нц пока s <= 512 s : = s + 25 n : = n + 4 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 512: s += 25 n += 4 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 3.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 512 WHILE S > 0 S = S — 25 N = N + 4 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 512; while s > 0 do begin s : = s — 25; n : = n + 4; end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 512; while (s > 0) { s = s — 25; n = n + 4; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 512 нц пока s > 0 s : = s — 25 n : = n + 4 кц вывод n кон |
| Python | |
|
n = 0 s = 512 while s > 0: s -= 25 n += 4 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 2.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 256 WHILE S > 0 S = S — 25 N = N + 3 WEND PRINT N |
var n, s: integer; begin n : = 0; s : = 256; while s > 0 do begin s : = s — 25; n : = n + 3; end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; void main() { int n, s; n = 0; s = 256; while (s > 0) { s = s — 25; n = n + 3; } cout « n « endl; } |
алг нач цел n, s n : = 0 s : = 256 нц пока s > 0 s : = s — 25 n : = n + 3 кц вывод n кон |
| Python | |
|
n = 0 s = 256 while s > 0: s -= 25 n += 3 print(n) |
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 3.
Запишите число, которое будет напечатано в результате выполнения программы (для Вашего удобства программа представлена на четырёх языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 325 S = S + 10 N = N + 3 WEND PRINT N |
var n, s: integer; begin n := 0; s := 0; while s <= 325 do begin s := s + 10; n := n + 3 end; write (n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main () { int n, s; n = 0; s = 0; while (s <= 325) { s = s + 10; n = n + 3; } cout « n « endl; } |
алг нач целn, s n := 0 s := 0 нц пока s <= 325 s := s + 10 n := n + 3 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 325: s += 10 n += 3 print(n) |
Источник: Демонстрационная версия ЕГЭ—2014 по информатике.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 365 S = S + 36 N = N + 8 WEND PRINT N |
var n, s: integer; begin n := 0; s := 0; while s <= 365 do begin s := s + 36; n := n + 8 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 365) { s = s + 36; n = n + 8; } cout « n « endl; } |
алг нач цел n, s n := 0 s := 0 нц пока s <= 365 s := s + 36 n := n + 8 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 365: s += 36 n += 8 print(n) |
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 267 S = S + 25 N = N + 10 WEND PRINT N |
var n, s: integer; begin n := 0; s := 0; while s <= 267 do begin s := s + 25; n := n + 10 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 267) { s = s + 25; n = n + 10; } cout « n « endl; } |
алг нач цел n, s n := 0 s := 0 нц пока s <= 267 s := s + 25 n := n + 10 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 267: s += 25 n += 10 print(n) |
Источник: ЕГЭ по информатике 08.07.2013. Вторая волна. Вариант 501.
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
| Бейсик | Паскаль |
|---|---|
|
DIM N, S AS INTEGER N = 0 S = 0 WHILE S <= 267 S = S + 25 N = N + 20 WEND PRINT N |
var n, s: integer; begin n := 0; s := 0; while s <= 267 do begin s := s + 25; n := n + 20 end; write(n) end. |
| Си++ | Алгоритмический язык |
|
#include <iostream> using namespace std; int main() { int n, s; n = 0; s = 0; while (s <= 267) { s = s + 25; n = n + 20; } cout « n « endl; } |
алг нач цел n, s n := 0 s := 0 нц пока s <= 267 s := s + 25 n := n + 20 кц вывод n кон |
| Python | |
|
n = 0 s = 0 while s <= 267: s += 25 n += 20 print(n) |
Источник: ЕГЭ по информатике 08.07.2013. Вторая волна. Вариант 502.
Всего: 526 1–20 | 21–40 | 41–60 | 61–80 …
Пройти тестирование по 10 заданиям
Пройти тестирование по всем заданиям
Вернуться к каталогу заданий
Версия для печати и копирования в MS Word
1
Алгоритм вычисления значения функции F(n), где n — целое неотрицательное число, задан следующими соотношениями:
F(0) = 0;
F(n) = F(n / 2), если n > 0 и при этом чётно;
F(n) = 1 + F(n − 1), если n нечётно.
Сколько существует таких чисел n, что 1 ≤ n ≤ 1000 и F(n) = 3?
2
Алгоритм вычисления значения функции F(n), где n — целое неотрицательное число, задан следующими соотношениями:
F(n) = 0, при n ≤ 1;
F(n) = F(n − 1) + 3n2, если n > 1 и при этом нечётно;
F(n) = n / 2 + F(n − 1) + 2, если n > 1 и при этом чётно.
Чему равно значение функции F(49)? В ответе запишите только целое число.
Источник: ЕГЭ по информатике 24.06.2021. Основная волна. Вариант Евгения Джобса
3
Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:
F(n) = 1 при n = 1;
F(n) = n + F(n − 1), если n чётно,
F(n) = 2 × F(n − 2), если n > 1 и при этом n нечётно.
Чему равно значение функции F(26)?
Источник: Демонстрационная версия ЕГЭ−2022 по информатике
4
Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:
F(n) = 2 при n < 3;
F(n) = F(n − 2) + F(n − 1) − n, если n > 2 и при этом n чётно,
F(n) =F(n − 1) − F(n − 2) + 2 × n, если n > 2 и при этом n нечётно.
Чему равно значение функции F(32)?
Источник: ЕГЭ по информатике 2022. Досрочная волна
5
Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:
F(n) = 1 при n = 1;
F(n) = n · F(n − 1), если n > 1.
Чему равно значение выражения F(2023) / F(2020)?
Источник: Демонстрационная версия ЕГЭ−2023 по информатике
Пройти тестирование по этим заданиям
На уроке рассмотрено решение 25 задания ЕГЭ по информатике: дается подробное объяснение и разбор заданий демонстрационных вариантов и досрочных экзаменов
Содержание:
- Объяснение задания 25 ЕГЭ по информатике
- Алгоритмизация и программирование
- Решение 25 заданий ЕГЭ по информатике
- Делители числа
- Простые числа
- Задания прошлых лет для тренировки (до 2021)
- Задачи с поэлементной обработкой массива
- Задачи на обработку элементов массива с последующей заменой
- Задачи на обработку пар элементов массива (два подряд идущих)
- Задачи на обработку трёх подряд идущих элементов массива (тройки элементов массива)
- Задачи на поиск максимума, минимума элементов массива и другие
- Решение 25 заданий ЕГЭ по информатике: более сложные задания
25-е задание: «Программная обработка целочисленной информации»
Уровень сложности
— высокий,
Требуется использование специализированного программного обеспечения
— да,
Максимальный балл
— 2,
Примерное время выполнения
— 20 минут.
Проверяемые элементы содержания: Умение создавать собственные программы (10–20 строк) для обработки целочисленной информации
Рекомендации по выполнению:
«В этом задании требуется написать фрагмент программы, реализующий простую обработку целочисленного массива. У экзаменуемых, хорошо освоивших технику программирования, это задание обычно не вызывает серьёзных затруднений, поскольку алгоритм обработки массива не относится к сложным»
Типичные ошибки и рекомендации по их предотвращению:
«Часто бывает, что увлекшись написанием решения, экзаменуемый совершает ошибки в простых ситуациях: организация ввода-вывода, описание и инициализация переменных, обработка массива (выход за границу) и т.д. Эти ошибки могут стоить Вам нескольких баллов, старайтесь их не допускать»
ФГБНУ «Федеральный институт педагогических измерений»
Алгоритмизация и программирование
Для решения задания требуется вспомнить темы:
- Одномерные массивы.
- Двумерные массивы.
Решение 25 заданий ЕГЭ по информатике
Плейлист видеоразборов задания на YouTube:
Задание демонстрационного варианта 2022 года ФИПИ
Делители числа
25_7:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [126849; 126871], числа, имеющие ровно 4 различных делителя.
Выведите эти четыре делителя для каждого найденного числа в порядке возрастания.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
- Будем использовать оптимизированный вариант программы, подходящий для «медленных» компьютеров. Для этого перебор делителей для числа
nбудем выполнять от2до√n, округлив его до ближайшего целого числа (не включая точный квадратный корень, если он существует):
PascalABC.net:
|
||
Python:
|
||
| С++: |
✎ Решение (оптимизированный вариант):
вместо диапазона делителей [1; число] использовать диапазон [1; округл(√n)]
n), то в список делителей добавлять будем только сам делитель, если нет – то добавляем пару делителей (делитель и n // делитель):Пример: число 8 = 2 * 4 Достаточно рассмотреть цикл от 2 до округл(√8) (=2) если 8 делится на 2 и 8/2 не равно 2, то делители: 2 и 4 (8/2)
PascalABC.net:
|
||
Python:
|
||
| С++: |
✎ Решение: Генерация списка делителей.
Общая идея:
| PascalABC.net: |
Python:
for n in range(126849, 126871+1): divs = [d for d in range(1, n+1) if n % d == 0] if len(divs) == 4: print( *divs ) |
| С++: |
Ответ:
1 3 42283 126849 1 47 2699 126853 1 5 25373 126865 1 293 433 126869
25_8:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [164700; 164752], числа, имеющие ровно 6 различных делителей.
Выведите эти делители для каждого найденного числа в порядке возрастания.
✍ Решение:
-
✎ Решение (оптимизированный вариант):
- Для каждого числа указанного диапазона генерируем список делителей.
- Если длина списка равна четырем, выводим его.
PascalABC.net:
|
||
Python:
|
||
| С++: |
✎ Решение: Генерация списка делителей.
Общая идея:
| PascalABC.net: |
Python:
for n in range(164700, 164752+1): divs = [d for d in range(1, n+1) if n % d == 0] if len(divs) == 6: print( *divs ) |
| С++: |
Ответ:
1 2 4 41177 82354 164708 1 3 9 18301 54903 164709 1 2 4 41179 82358 164716 1 2 4 41183 82366 164732
25_9:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190230], числа, имеющие ровно 4 различных делителя.
Выведите эти четыре делителя для каждого найденного числа в порядке убывания.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
- Для каждого числа указанного диапазона генерируем список делителей.
- Если длина списка равна четырем, выводим его.
PascalABC.net:
|
||
Python:
|
||
| С++: |
✎ Решение (оптимизированный вариант):
PascalABC.net:
|
||
Python:
|
||
| С++: |
✎ Решение: Генерация списка делителей.
Общая идея:
| PascalABC.net: |
Python:
for n in range(190201, 190230+1): divs = [d for d in range(1, n+1) if n % d == 0] if len(divs) == 4: divs.reverse() # реверсируем (по убыванию) print( *divs ) |
| С++: |
Ответ:
190201 17291 11 1 190202 95101 2 1 190214 95107 2 1 190219 853 223 1 190222 95111 2 1 190223 17293 11 1 190227 63409 3 1 190229 14633 13 1
Видеоразбор задания:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
25_10:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190280], числа, имеющие ровно 4 различных ЧЁТНЫХ делителя.
Выведите эти четыре делителя для каждого найденного числа в порядке убывания.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
- Для каждого числа указанного диапазона генерируем список делителей.
- Если длина списка равна четырем, выводим его.
PascalABC.net:
|
||
Python:
|
||
| С++: |
✎ Решение: Генерация списка делителей.
Общая идея:
| PascalABC.net: |
Python:
for n in range(190201, 190280+1): divs = [d for d in range(1, n+1) if n % d == 0 and d % 2 == 0] if len(divs) == 4: divs.reverse() print( *divs ) |
| С++: |
Ответ:
190226 838 454 2 190234 17294 22 2 190238 2606 146 2 190252 95126 4 2 190258 758 502 2 190274 27182 14 2 190276 95138 4 2
25_11:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [394441; 394505], числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите минимальное из них.
Выведите количество делителей найденного числа и два наибольших делителя в порядке убывания.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
PascalABC.net:
|
||
Python:
|
||
| С++: |
✎ Решение (Генерация списка делителей):
| PascalABC.net: | ||
Python:
|
||
| С++: |
Ответ: 48 394450 197225
Видео
Простые числа
25_12:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [3532000; 3532160], простые числа.
Выведите все найденные простые числа в порядке убывания, слева от каждого числа выведите его номер по порядку.
✍ Решение:
-
✎ Решение (неоптимизированный вариант, метод полного перебора):
PascalABC.net:
|
||
Python:
|
||
| С++: |
✎ Решение (оптимизированный вариант):
PascalABC.net:
|
||
Python:
|
||
| С++: |
Ответ:
1 3532147 2 3532121 3 3532103 4 3532091 5 3532049 6 3532033 7 3532021 8 3532019 9 3532007
Задания прошлых лет для тренировки (до 2021)
Задачи с поэлементной обработкой массива
25_1: ЕГЭ по информатике 2017 года (один из вариантов со слов выпускника):
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива НЕ кратных 3.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.
1 2 3 4 5 6 7 8 |
const N = 20; var i,j,k:integer; a:array [1..N] of integer; begin for i:=1 to N do readln(a[i]); … end. |
✍ Решение:
Рассмотрим заданный фрагмент решения:
- в цикле со счетчиком i запрашиваются значения элементов массива, т.е. формируется массив;
- из постановки задания видим, что необходимо найти количество чего-то, это значит, что нужно использовать переменную счетчик;
- объявлены три целочисленных переменных: i, j, k; переменная i использована в первом цикле, значит для счетчика можно взять переменную k;
- счетчик всегда нужно обнулять, поэтому следующим оператором будет:
- определим, количество чего нам необходимо считать: количество элементов массива не кратных 3. Кратность можно определить через остаток от деления: если значение элемента массива при делении на 3 в остатке не возвращает 0, значит элемент не кратен трем;
- остаток при делении в паскале — оператор mod. Поскольку необходимо просмотреть каждый элемент массива, то это нужно делать в цикле for;
- переменная i уже использована в первом цикле for, значит, для очередного цикла возьмем неиспользованную переменную j:
- если условие истинно (т.е. нашелся элемент массива, не кратный трем), то увеличиваем счетчик:
- после цикла остается вывести значение счетчика, т.е. вывести количество элементов массива не кратных 3:
for j:=1 to N do if a[j] mod 3 <> 0 then
Результат:
k:=0; for j:=1 to N do if a[j] mod 3 <> 0 then inc(k); writeln(k);
Смотрите видео с подробным объяснением и разбором данного 25 задания:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
Задачи на обработку элементов массива с последующей заменой
25_3: Решение 25 задания ЕГЭ по информатике Демоверсия 2018:
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, больших 100 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденному количеству. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести измененный массив, каждый элемент массива выводится с новой строчки.
Например, для массива из шести элементов: 4 115 7 195 25 106
программа должна вывести числа 4 2 7 2 25 106
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
const N = 30; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Похожие задания для тренировки
✍ Решение:
-
Решение на языке Паскаль:
1 2 3 4 5 6 7 8 9 |
k := 0; for i := 1 to N do if (a[i] > 100) and (a[i] mod 5 = 0) then k:=k+1; for i := 1 to N do begin if (a[i] > 100) and (a[i] mod 5 = 0) then a[i] := k; writeln(a[i]) end |
25_6:
Дан массив, содержащий неотрицательные целые числа. Необходимо вывести:
Например, для массива из шести элементов: 4 6 12 17 3 8
ответом будет 12 — наибольшее чётное число, поскольку чётных чисел в этом массиве больше
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Python:
1 2 3 4 5 6 |
# допускается также использовать # целочисленные переменные j, k, m a = [] n = 2000 // менять значение n нельзя for i in range(0, n): a.append(int(input())) |
✍ Решение:
-
Решение на языке Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
a = [] n = 2000 // менять значение n нельзя for i in range(0, n): a.append(int(input())) j = 0 k = 0 m = 0 for i in range(0, n): if a[i]%2 == 0: j+=1 else: k+=1 if k>j: j = 0 for i in range(0, n): if a[i]>j and a[i] % 2 != 0: j = a[i] print(j) else: for i in range(0, n): if a[i]>m and a[i] % 2 == 0: m = a[i] print(m) |
Задачи на обработку пар элементов массива (два подряд идущих)
25_4:
Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых одно из чисел двузначное. В данной задаче под парой подразумевается два подряд идущих элемента массива.
Например, для массива из семи элементов: 13; 323; 12; 33; 117 — ответ: 4.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
1 2 3 4 5 6 7 8 9 10 |
const N = 40; var a: array [1..N] of integer; i, j, k: integer; begin for i := 1 to N do readln(a[i]); ... end. |
✍ Решение:
1 2 3 4 5 |
k := 0; for i := 1 to N - 1 do if ((a[i] < 100) and (a[i] > 9)) or ((a[i + l] < 100) and (a[i + 1] > 9)) then inc(k); writeln(k); |
25_5:
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от -10 000 до 10 000 включительно. Опишите алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых сумма элементов делится на 2, но не делится на 4. В данной задаче под парой подразумевается два подряд идущих элемента массива.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Python:
1 2 3 4 5 6 7 |
# допускается также использовать # две целочисленные переменные # j и k a = [] n = 20 for i in range(0, n): a.append(int(input())) |
✍ Решение:
-
Проанализируем данный фрагмент кода на языке Python:
- В первой строчке кода объявляется список а. Дальше, идет объявление переменной n = 20, она отвечает за размер массива.
- Ниже мы видим инициализацию списка а. Мы должны дописать код дальнейшей программы, который последует после заполнения списка пользователем.
- Итак, по условию мы должны находить пары элементов, сумма которых делится на 2, но не делится на 4, причем парами считаются соседние элементы, например:
a[0]иa[1],a[1]иa[2]. - Мы можем узнать, делится ли данный элемент на число, если остаток от деления на него равен 0, и не делится — в противном случае. Тогда сумма соседних элементов при делении на 2 должна давать остаток 0, а при делении на 4 наоборот — отличный от 0.
- Введем цикл, который будет перебирать все элементы массива, считать сумму соседей и проверять истинность условия.
- Когда мы определились с условием, за счетчик возьмем переменную
k, которую допустимо брать исходя из комментариев к программе. - Мы добавили допустимую переменную
j, чтобы условный оператор выглядел компактнее. - Однако задача еще не решена. Во-первых, мы должны до цикла инициализировать счетчик
k = 0. Так как иначе Python выдаст ошибку. - Кроме того, добавим вывод результата после цикла.
- Таким образом, правильный вариант с учетом доработок:
При решении такого рода задач, необходимо помнить, что массив в Python — это список и это динамический тип данных. Кроме того, нумерация элементов массива начинается с 0.
for i in range(0, n-1): j = a[i] + a[i+1] if j%2 == 0 and j%4 != 0:
Так как мы рассматриваем элемент a[i + 1], значит, цикл должен работать до n — 1, чтобы не выйти за границы диапазона массива.
... if j%2 == 0 and j%4 != 0: k+=1
Дело в том, что мы пытаемся присвоить переменной k его же значение, но на 1 больше, но интерпретатор «не встречал» раньше переменной k, из-за чего возникает ошибка.
a = [] n = 20 for i in range(0, n): a.append(int(input())) k = 0 for i in range(0, n - 1): j = a[i] + a[i + 1] if j%2 == 0 and j%4 != 0: k += 1 print(k)
Задачи на обработку трёх подряд идущих элементов массива (тройки элементов массива)
25_2:
Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество троек элементов массива, состоящих из равных между собой чисел. В данной задаче под тройкой подразумевается три подряд идущих элемента массива.
Например, для массива из семи элементов: 2; 2; 2; 4; 4; 4; 4 — ответ: 3.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
1 2 3 4 5 6 7 8 9 10 |
const N=40; var a: array[1..N] of integer; i, j, k:integer; begin for i:=1 to N do readln(a[i]); ... end. |
✍ Решение:
- из постановки задания видим, что необходимо искать количество чего-то, это значит, что нужно использовать переменную счетчик; возьмем для нее объявленную переменную k;
- счетчик всегда нужно сначала обнулять, поэтому следующим оператором будет:
- определим, количество чего нам необходимо считать: количество троек элементов массива, состоящих из равных между собой чисел. Т.е. необходимо сравнивать между собой каждые три подряд идущих элемента массива, например так:
- inc(k) — оператор, увеличивающий счетчик k на единицу;
- условие необходимо выполнять в цикле, так как нужно проверить все элементы массива; цикл со счетчиком необходимо организовать от 1 до N-2, в противном случае индексы элементов a[i+2] выйдут за границы диапазона массива (например, при i = 40, получим … a[40+2], а 42-го элемента массива не существует, поэтому цикл надо делать до i = 38, т.е. N-2).
if (a[i]=a[i+1]) and (a[i]=a[i+2]) then inc(k);
Результат:
for i:=1 to N-2 do if (a[i]=a[i+1]) and (a[i]=a[i+2]) then inc(k); writeln(k);
Более подробное объяснение предлагаем посмотреть на видео:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
Задачи на поиск максимума, минимума элементов массива и другие
Доброго времени суток каждому жителю Хабрвилля! Давненько я не писал статей! Пора это исправить!
В сегодняшней статье поговорим о насущной для многих выпускников школ теме — ЕГЭ. Да-да-да! Я знаю, что Хабр — это сообщество разработчиков, а не начинающих айтишников, но сейчас ребятам как никогда нужна поддержка именно сообщества. Ребят опять посадили на дистант. Пока не ясно на какой период, но уже сейчас можно сказать, что ЕГЭ по информатике будет на компьютерах и его можно зарешать при помощи языка Python.
Вот я и подумал, чтобы не получилось как в песне, стоит этим заняться. Я расскажу про все задачи первой части и их решения на примере демо варианта ЕГЭ за октябрь.
Всех желающих — приглашаю ниже!
Быстрый перевод из системы в систему
В Python есть интересные функции bin(), oct() и hex(). Работают данные функции очень просто:
bin(156) #Выводит '0b10011100'
oct(156) #Выводит '0o234'
hex(156) #Выводит '0x9c'
Как вы видите, выводится строка, где 0b — означает, что число далее в двоичной системе счисления, 0o — в восьмеричной, а 0x — в шестнадцатеричной. Но это стандартные системы, а есть и необычные…
Давайте посмотрим и на них:
n = int(input()) #Вводим целое число
b = '' #Формируем пустую строку
while n > 0: #Пока число не ноль
b = str(n % 2) + b #Остатот от деления нужной системы (в нашем сл записываем слева
n = n // 2 #Целочисленное деление
print(b) #Вывод
Данная программа будет работать при переводе из десятичной системы счисления в любую до 9, так как у нас нет букв. Давайте добавим буквы:
n = int(input()) #Вводим целое число
b = '' #Формируем пустую строку
while n > 0: #Пока число не ноль
if (n % 21) > 9: #Если остаток от деления больше 9...
if n % 21 == 10: #... и равен 10...
b = 'A' + b #... запишем слева A
elif n % 21 == 11:#... и равен 11...
b = 'B' + b#... запишем слева B
'''
И так далее, пока не дойдём до системы счисления -1 (я переводил в 21-ную систему и шёл до 20)
'''
elif n % 21 == 11:
b = 'B' + b
elif n % 21 == 12:
b = 'C' + b
elif n % 21 == 13:
b = 'D' + b
elif n % 21 == 14:
b = 'E' + b
elif n % 21 == 15:
b = 'F' + b
elif n % 21 == 16:
b = 'G' + b
elif n % 21 == 17:
b = 'H' + b
elif n % 21 == 18:
b = 'I' + b
elif n % 21 == 19:
b = 'J' + b
elif n % 21 == 20:
b = 'K' + b
else: #Иначе (остаток меньше 10)
b = str(n % 21) + b #Остатот от деления записываем слева
n = n // 21 #Целочисленное деление
print(b) #Вывод
Способ объёмен, но понятен. Теперь давайте используем тот же функцию перевода из любой системы счисления в любую:
def convert_base(num, to_base=10, from_base=10):
# Перевод в десятичную систему
if isinstance(num, str): # Если число - строка, то ...
n = int(num, from_base) # ... переводим его в нужную систему счисления
else: # Если же ввели число, то ...
n = int(num) # ... просто воспринять его как число
# Перевод десятичной в 'to_base' систему
alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Берём алфавит
if n < to_base: # Если число меньше системы счисления в которую переводить...
return alphabet[n] # ... вернуть значения номера в алфавите (остаток от деления)
else: # Иначе...
return convert_base(n // to_base, to_base) + alphabet[n % to_base] # ... рекурсивно обратиться к функии нахождения остатка
Вызвав функцию вывода print(convert_base(156, 16, 10)) мы переведём 156 из 10 в 16 систему счисления, а введя print(convert_base('23', 21, 4)) переведёт 23 из 4-ичной в 21-ичную систему (ответ: B).
Задача 2
Все задания беру из первого октябрьского варианта (он же вариант № 9325894) с сайта Решу.ЕГЭ.
Решение данной задачи совсем простое: банальный перебор.
print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
for x in range(2):
for z in range(2):
for w in range(2):
F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
print(x, y, z, F) #Выводим результат
Результат:
Нам вывелась вся таблица истинности (1 = True, 0 = False). Но это не очень удобно. Обратите внимание, что в задании, функция равно 0, так и давайте подправим код:
print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
for x in range(2):
for z in range(2):
for w in range(2):
F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
if not F:
print(x, y, z, F) #Выводим результат
Результат:
Далее — простой анализ.
Задача 5
Данная задача легко решается простой последовательностью действий в интерпретационном режиме:
Задача 6
Перепечатали и получили ответ:
s = 0
k = 1
while s < 66:
k += 3
s += k
print(k)
Задача 12
В очередной раз, просто заменим слова на код:
a = '9' * 1000
while '999' in a or '888' in a:
if '888' in a:
a = a.replace('888', '9', 1)
else:
a = a.replace('999', '8', 1)
print(a)
Задача 14
Компьютер железный, он всё посчитает:
a = 4 ** 2020 + 2 ** 2017 - 15
k = 0
while a > 0:
if a % 2 == 1:
k += 1
a = a // 2
print(k)
Задача 16
Опять же, просто дублируем программу в python:
def F(n):
if n > 0:
F(n // 4)
print(n)
F (n - 1)
print(F(5))
Результат:
Задача 17
Задача с файлом. Самое сложное — достать данные из файла. Но где наша не пропадала?!
with open("17.txt", "r") as f: #Открыли файл 17.txt для чтения
text = f.read() #В переменную text запихнули строку целиком
a = text.split("n") #Разбили строку энтерами (n - знак перехода на новую строку)
k = 0 #Стандартно обнуляем количество
m = -20001 #Так как у нас сумма 2-ух чисел и минимальное равно -10000, то минимум по условию равен -20000, поэтому...
for i in range(len(a)): #Обходим все элементы массива
if (int(a[i - 1]) % 3 == 0) or (int(a[i]) % 3 == 0): #Условное условие
k += 1 #Счётчик
if int(a[i - 1]) + int(a[i]) > m: #Нахождение минимума
m = int(a[i - 1]) + int(a[i])
print(k, m) #Вывод
Немного пояснений. Функция with() открывает файл считывает данные при помощи функции read() и закрывает файл. В остальном — задача стандартна.
Задача 19, 20 и 21
Все три задачи — задачи на рекурсию. Задачи идентичны, а вопросы разные. Итак, первая задача:
Пишем рекурсивную функцию и цикл перебора S:
def f(x, y, p): #Рекурсивная функция
if x + y >= 69 or p > 3: #Условия завершения игры
return p == 3
return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
for s in range (1, 58 + 1): #Перебор S
if f(10, s, 1): #Начали с 10 камней
print(s)
break
Немного пояснений. В рекурсивной функции существует 3 переменные x — число камней в первой куче, y — число камней во второй куче, p — позиция. Позиция рассчитывается по таблице:
|
Игра |
Петя |
Ваня |
Петя |
Ваня |
Петя |
|
|
p |
1 |
2 |
3 |
4 |
5 |
6 |
Далее — всё по условию задачи.
Вторая задача на теорию игр:
Все отличия в рамке. Ну и код, соответственно, не сильно отличается:
def f(x, y, p): #Рекурсивная функция
if x + y >= 69 or p > 4: #Условия завершения игры
return p == 4
if p % 2 != 0:
return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
else:
return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий
for s in range (1, 58 + 1): #Перебор S
if f(10, s, 1): #Начали с 10 камней
print(s)
Отличия:
-
Выиграл Петя, соответственно, позиция 4
-
Так как Петя не может выиграть за один ход — он выигрывает за 2 хода (and, а не or на нечётных позициях (играх Пети))
-
Убрали break, так как нам нужны все S, а не единственный
Последняя вариация задачи:
Сразу код:
def f(x, y, p): #Рекурсивная функция
if x + y >= 69 or p > 5: #Условия завершения игры
return p == 3 or p == 5
if p % 2 == 0:
return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
else:
return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий
for s in range (1, 58 + 1): #Перебор S
if f(10, s, 1): #Начали с 10 камней
print(s)
Ну и всего лишь 2 отличия:
-
Позиции 3 или 5, а не 4, так как выиграл Ваня
-
На второй ход выигрывает Ваня и нам нужно or и and поменять. Я заменил только кратность 2.
Задача 22
Ctrl+C, Ctrl+V — наше всё! 
for i in range(1, 100000):
x = i
L = 0
M = 0
while x > 0 :
L = L+1
if (x % 2) != 0:
M = M + x % 8
x = x // 8
if L == 3 and M == 6:
print(i)
Задача 23
Итак, код:
def f(x, y):
if x > y: #Перегнали цель
return 0
if x == y: #Догнали цель
return 1
if x < y: #Догоняем цель тремя методами
return f(x + 1, y) + f(x + 2, y) + f(x * 2, y)
print(f(3, 10) * f(10, 12)) #Прошло через 10, значит догнали 10 и от де догоняем 12
Так как в условии задачи мы увеличиваем число, но будем числа «догонять». Три метода описаны, ну а пройти через 10 — значит дойти до него и идти от него.
Собственно, это и есть вся первая часть ЕГЭ по информатике решённая на Python.
Ссылка на репозиторий со всеми программами:
Надеюсь, что смог помочь в своей статье выпускникам и готовящимся 
Остался один вопрос — нужен ли разбор второй части ЕГЭ по информатике на Python? Оставлю этот вопрос на ваше голосование.
Всем удачи!
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Делаю разбор второй части?
Проголосовали 106 пользователей.
Воздержались 15 пользователей.
Чтобы увидеть подробное решение, нажмите на номер соответствующего задания
Номер 7416:
На вход программе подаются сведения о ячейках автоматической камеры хранения багажа. В первой строке задана текущая дата: через точку два целых числа, соответствующие дню (от 01 до 31 – ровно 2 символа) и месяцу (от 01 до 12 – ровно 2 символа). Во второй строке сообщается количество занятых ячеек N, которое не меньше 3, но не превосходит 1000. Каждая из следующих N строк имеет следующий формат:..
Номер 7448:
На вход программе подаются сведения о пассажирах, желающих сдать свой багаж в камеру хранения на заранее известное время до полуночи. В первой строке сообщается число пассажиров N, которое не меньше 3, но не превосходит 1000; во второй строке – количество ячеек в камере хранения K, которое не меньше 10, но не превосходит 1000. Каждая из следующих N строк имеет следующий формат:..
Номер 7480:
По каналу связи передаётся последовательность положительных целых чисел, все числа не превышают 1000. Количество чисел известно, но может быть очень велико. Затем передаётся контрольное значение последовательности – наибольшее число R, удовлетворяющее следующим условиям:..
Номер 7608:
На ускорителе для большого числа частиц производятся замеры скорости каждой из них. Скорость частицы – это целое неотрицательное число. Частиц, скорость которых измерена, может быть очень много, но не может быть меньше трёх. Скорости всех частиц различны…
Номер 7640:
На ускорителе для большого числа частиц производятся замеры скорости каждой из них. Скорость частицы – это целое неотрицательное число. Частиц, скорость которых измерена, может быть очень много, но не может быть меньше трёх. Скорости всех частиц различны. Скорость, по крайней мере, одной частицы нечётна…
Номер 7672:
На ускорителе для большого числа частиц производятся замеры скорости каждой из них. Скорость частицы – это целое число (положительное, отрицательное или 0). Частиц, скорость которых измерена, может быть очень много, но не может быть меньше трёх. Скорости всех частиц различны. В серии обязательно присутствует хотя бы одна частица с отрицательной скоростью…
Номер 7736:
На спутнике «Фотон» установлен прибор, предназначенный для измерения энергии космических лучей. Каждую минуту прибор передаёт по каналу связи неотрицательное вещественное число – количество энергии, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь…
Номер 8023:
Муниципальный этап олимпиады по информатике проводился для учеников 7–11-х классов. Все ученики участвовали в общем конкурсе. Каждый участник олимпиады мог набрать от 0 до 400 баллов. По положению об олимпиаде победителем признаётся участник, набравший наибольшее количество баллов, при условии, что им набрано больше половины возможных баллов…
Номер 8055:
Региональный этап олимпиады по информатике проводился для учеников 9–11-х классов. Все ученики участвовали в общем конкурсе. Каждый участник олимпиады мог набрать от 0 до 600 баллов. По положению об олимпиаде победители определяются следующим образом.
Номер 8127:
В физической лаборатории проводится долговременный эксперимент по изучению гравитационного поля Земли. По каналу связи каждую минуту в лабораторию передаётся положительное целое число – текущее показание прибора «Сигма 2015». Количество передаваемых чисел в серии известно и не превышает 10 000. Все числа не превышают 1000. Временем, в течение которого происходит передача, можно пренебречь.
Номер 8190:
Космическое агентство производит эксперимент, в котором участвуют спутники «Птолемей-1» и «Птолемей-2». На спутнике «Птолемей-1» установлен прибор для измерения расстояния между спутниками. Каждую минуту прибор передаёт по каналу связи неотрицательное целое число – расстояние между спутниками в текущий момент в километрах…
Номер 8298:
Вам предлагается два задания с похожими условиями: задание А и задание Б. Вы можете решать оба задания или одно из них по своему выбору. Задание Б более сложное, его решение оценивается выше. Итоговая оценка выставляется как…
Номер 8703:
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 3 (разница в индексах элементов пары должна быть 3 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 13…
Показать похожие
Номер 8730:
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 3 (разница в индексах элементов пары должна быть 3 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 23…
Номер 8757:
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 4 (разница в индексах элементов пары должна быть 4 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 11…
Номер 8676:
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре неважен). Необходимо определить количество пар, для которых произведение элементов не кратно 14…
10 сентября 2020
В закладки
Обсудить
Жалоба
Задачи на программирование по спецификации ЕГЭ-2021 по информатике.
→ inf_2021.zip
→ Этот архив на гугл-диске автора: drive.google.com/file/d/1MliAyimms3FfngJPhVmYf7Dc_ZYjIkC2/view
Цитата: Описание от автора
Привет! Это архив с задачами на программирование по спецификациям ЕГЭ-2021 по информатике.
Сразу скажу, что это не настоящие задачи. Это то, какие задачи автор видит возможными на ЕГЭ-2021 с использованием компьютера. Когда нет никаких задач для подготовки, даже какие-то могут быть очень полезными.
Автор: Константин Амеличев, ВШЭ ФКН ПМИ ’23, победитель Всероссийской олимпиады школьников по информатике 2019
Связь: kostya.amelichev@gmail.com, vk.com/i_tried_to_name_myself_kikos, t.me/kik0s
Все задачи были сгенерированы автоматически, небольшая выборка была проверена вручную. О любых ошибках/багах/опечатках можно писать по любому из каналов связи выше. Архив должен быть расположен на гугл-диске, по ходу исправления архив может быть обновлен — рекомендуется периодически проверять текущую версию архива.
Текущая версия: v1.0
Распространение разрешено в некоммерческих целях с указанием источника. Наличие этого файла (readme) в архиве является достаточным указанием источника.
Сегодня посмотрим одно из самых интересных заданий из ЕГЭ по информатике 2023. Будем решать 24 задание. В этом задании нужно работать с файлами.
Все решения задач из задания 24 ЕГЭ по информатике 2023 будут приведены на языке программирования Python (Питон).
Поехали!
Задача (Самая простая)
Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальное количество идущих подряд символов B. Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Решение:
Решим данную задачу на языке Python.
f=open('24_1.txt') s=f.read() k=0 kmax=0 for i in range(0, len(s)): if s[i]=='B': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax)
С помощью команды open() подвязываемся к файлу. Чтобы не прописывать полный путь, файл должен лежать в той же папке, что и программа.
С помощью команды .read() зачитываем в переменную s всё содержимое файла.
Переменная k — это текущий счётчик символов «B». Задача переменной kmax сохранить максимальное значение k.
С помощью цикла for перебираем все символы из строки s. Переменная i пробегается по номерам всех симолов. Счёт символов начинается в строке с нуля. В начале берём нулевой символ, потом первый и т.д. Конструкция for i in range(0, len(s)) позволяет пройтись по всем символам строки до конца.
Если нам встретился нужный символ «B», то мы счётчик прибавляем на 1. Это значит, что мы подсчитываем текущую цепочку. Если будет стоять 3 символа «B» подряд, значит, счёт k покажет значение 3. Как только встретится дургой символ, то это означает, что цепочка прервалась и счётчик переводится в первоначальное положение 0.
При любом увеличении счётчика происходит анализ этого счётчика на максимальность. Функция max выбирает максимальное значение из старого значения kmax и нового показания счётчика k. Если счётчику k удалось победить kmax, то его значение будет считаться максимальным на данный момент времени.
В ответ идёт значение kmax. Это и есть длина максимальной цепочки. В этой задачке ответ получается 11.
Ответ: 11
Закрепим это простое задание из ЕГЭ по информатике 2023.
Задача (Простая, закрепление)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых нет символа Z. Для выполнения этого задания следует написать программу.
Решение:
Решение похоже на предыдущее.
f=open('24_2.txt') s=f.read() k=0 kmax=0 for i in range(0, len(s)): if s[i]!='Z': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax)
Если нет символов «Z», то подсчитываем, иначе сбрасываем.
Задача (Обращаемся к соседу)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, расположенных в алфавитном порядке (возможно с повторением симолов). Для выполнения этого задания следует написать программу.
Решение:
f=open('24_2.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if s[i]<=s[i+1]: k=k+1 kmax=max(k, kmax) else: k=1 print(kmax)
В ответе получается 15. Символы можно сравнивать между собой с помощью знаков «>» или меньше «<» ( а так же «>=» или «<=»), причём это сравнение происходит в алфавитном порядке. Например, символ «B» будет больше, чем «A» и т.п. Теперь нам нужно уже обратится к соседу, уже важна связь между соседними символами. Раз мы обращаемся к следующему символу, то должны пробегать до len(s)-1, иначе куда мы будем обращаться, когда дойдём до последнего символа?
В самом начале цепочки мы анализируем два символа, а к счётчику прибавляем всего лишь 1. Чтобы это учесть, в начале счётчику (переменной k) присваиваем 1. Затем, по мере продвижения по цепочке, мы добавляем в наш анализ 1 новый символ, и к счётчику добавляется одна 1. Дальше уже таких проблем нет.
Раз мы присвоили в переменную k единицу, то и сбрасывать в ветке else мы тоже должны на 1. Эти значения обычно взаимосвязаны.
Если мы обращаемся к соседнему символу, как правило, счётчик и сброс устанавливаются в 1. Это не стопроцентная истина, но иметь ввиду это нужно.
Ответ: 15
Задача (Обращаемся к соседу, закрепление)
Текстовый файл состоит не более чем из 106 символов арабских цифр (0, 1, …,9). Определите максимальное количество идущих подряд цифр, среди которых каждые две соседние различны. Для выполнения этого задания следует написать программу.
Решение:
f=open('24_3.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if s[i]!=s[i+1]: k=k+1 kmax=max(k, kmax) else: k=1 print(kmax)
Если соседи различны, мы подсчитываем, иначе сбрасываем.
Ответ: 120
Задача (Обращаемся к соседу, ещё сложнее)
Текстовый файл состоит не более чем из 106 символов арабских цифр (0, 1, …,9). Определите максимальное количество идущих подряд нечётных цифр, расположенных в неубывающем порядке. Для выполнения этого задания следует написать программу.
Решение:
f=open('24_3.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if s[i]<=s[i+1] and s[i] in '13579' and s[i+1] in '13579' : k=k+1 kmax=max(k, kmax) else: k=1 print(kmax)
Здесь опять можно применить знаки сравнения прям к символам. Удобно проверить принадлежность к нечётным цифрам конструкцией s[i] in ‘13579’. Нечётной цифрой должна быть как текущая, так и следующая.
Ответ: 8
Решим ещё одну тренировочную задачу из ЕГЭ по информатике 2023.
Задача (Обращаемся к соседу, ещё сложнее, закрепление)
Текстовый файл состоит не более чем из 106 символов 1, 2, 3, A, B, С. Определите максимальное количество идущих подряд символов, среди которых никакие две буквы и никакие две цифры не стоят рядом. Для выполнения этого задания следует написать программу.
Решение:
f=open('24_4.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if (s[i] in '123' and s[i+1] in 'ABC') or (s[i] in 'ABC' and s[i+1] in '123') : k=k+1 kmax=max(k, kmax) else: k=1 print(kmax)
В этой задаче цифры и буквы должны чередоваться. Если у нас цифра, то следующая должны быть буква, или наоборот, если у нас буква, то следующая должна быть цифра. В этих двух случаях прибавляем к счётчику 1.
Ответ: 20
Задача (Исключаем строку из 2-х символов, демо 2022)
Текстовый файл состоит из символов P, Q, R и S.
Определите максимальное количество идущих подряд символов
в прилагаемом файле, среди которых нет идущих подряд символов P.
Для выполнения этого задания следует написать программу.
Решение:
Напишем решение на языке Python.
f=open('24_5.txt') s=f.read() k=1 kmax=0 for i in range(0, len(s)-1): if s[i]=='P' and s[i+1]=='P': k=1 else: k=k+1 kmax = max(k, kmax) print(kmax)
Подсчитываем символы, пока не встретилась комбинация двух P подряд. Как только встретилась данная комбинация, сбрасываем счётчик на 1. Здесь мы сбрасываем счётчик на значение 1, чтобы учесть один символ, которые находится в самой комбинации PP. И в начале мы тоже устанавливаем счётчик в значение 1 по этой же причине.
Мы проходим в цикле for до длины строки минус один. Значение 1 в счётчике при сбросе и в начале программы так же компенсирует и тот момент, что мы не подсчитываем последний символ!
При изменении счётчика, сохраняем максимальное значение в переменной mx
Если бы у нас была вместо PP другая комбинация, состоящая к примеру из 5 символов, то мы бы тогда в начале и при сбросе писали в счётчик значение 5-1=4.
Здесь тоже работает негласное правило, обращаемся к соседу, значит, счётчик устанавливаем в 1.
В этой задаче получается ответ 188.
Ответ: 188
Задача (Исключаем подстроку из 3-х символов)
Текстовый файл состоит из символов арабских цифр(0, 1, …,9).
Определите максимальное количество идущих подряд символов
в прилагаемом файле, среди которых нет трёх символов 0, стоящих рядом.
Для выполнения этого задания следует написать программу.
Решение:
Напишем решение на языке Python.
f=open('24_6.txt') s=f.read() k=2 kmax=0 for i in range(0, len(s)-2): if s[i]=='0' and s[i+1]=='0' and s[i+2]=='0': k=2 else: k=k+1 kmax = max(k, kmax) print(kmax)
Чтобы понять это решение, нужно посмотреть предыдущую задачу. Мы здесь обращаемся к двум соседям, значит, счётчик устанавливаем в 2. Так же проходим в цикле до len(s)-2. Нежелательная строка может состоять не только из одинаковых символов. Может быть строка «XYYZ», к примеру.
Ответ: 7684
Задача (Не более одного символа Z)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых символ Z встречается не более одного раза.
Решение:
В нашей цепочке один раз можно встретиь символ Z, а два раза уже нельзя. Здесь мы применим функцию .split(). Как работает эта фнкция? Напишем тестовую программу.
s='sadqttqtreq' a=s.split('q') print(a)
Результат данной программы будет следующим:
[‘sad’, ‘tt’, ‘tre’, »]
Команда split «разрезает» строку по символу «q». В результате мы получаем массив с кусочками этой строки.
Решение нашей задачи.
f=open('24_7.txt') s=f.read() a=s.split('Z') k=0 kmax=0 for i in range(0, len(a)-1): k = len(a[i]) + 1 + len(a[i+1]) kmax = max(k, kmax) print(kmax)
Разрезаем нашу строку по символу «Z». Пробегаемся уже по массиву a. Цепочка-кандидат это текущий кусочек (a[i]), символ Z (1) и следующий кусочек (a[i+1]).
Каждого кандитата проверяем сразу на максимальность.
Ответ: 43
Задача (Не более двух символов Z)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых символ Z встречается не более двух раз.
Решение:
Решение аналогично предыдущему.
f=open('24_7.txt') s=f.read() a=s.split('Z') k=0 kmax=0 for i in range(0, len(a)-2): k = len(a[i]) + 1 + len(a[i+1]) + 1 + len(a[i+2]) kmax = max(k, kmax) print(kmax)
Ответ: 50
Задача (Звенья)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки символов, состоящей из повторяющихся фрагментов XYZ. Цепочка должна начинаться с символа X и заканчиваться символом Z. Например, для строки ZZZXYZXYZXZZZ длина цепочки равна 6: XYZ+XYZ
Решение:
Если мы подсчитаем количество идущих подряд звеньев XYZ, то, можно сказать, дело сделано.
f=open('24_8.txt') s=f.read() s=s.replace('XYZ', '1') k=0 kmax=0 for i in range(0, len(s)): if s[i]=='1': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax*3)
Мы с помощью команды replace заменили звенья на «1» (на символ, которого точно нет в файле). Теперь задача свелась к самой простой, которую мы рассматривали в начале статьи. Нужно просто подсчитать количество идущих поряд единиц.
В ответе нас просили указать количество символов, а не звеньев, поэтому переменную kmax умножаем на 3.
Ответ: 66
Задача (Звенья, закрепление)
Текстовый файл состоит не более, чем из 106 символов из набора A, B, С. Найдите максимальное количество идущих пар символов AC или AB. Искомая подстрока может включать только пары AB, только пары AC или содержать одновременно как пары AC, так и пары AB.
Решение:
f=open('24_9.txt') s=f.read() s=s.replace('AB', '1') s=s.replace('AC', '1') k=0 kmax=0 for i in range(0, len(s)): if s[i]=='1': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax)
Здесь нам подходит звено, как и AB, так и AC. В ответе нужно указать количество пар, поэтому не на что умножать переменную kmax не нужно.
Ответ: 19
Задача (Звенья, основная волна 20.06.22)
Текстовый файл состоит из символов A, B, C, D и O. Определите максимальное количество идущих подряд пар символов вида согласная + гласная в прилагаемом файле. Для выполенения этого задания следует написать программу.
Решение:
f=open('24_10.txt') s=f.read() s=s.replace('BA', '1') s=s.replace('CA', '1') s=s.replace('DA', '1') s=s.replace('BO', '1') s=s.replace('CO', '1') s=s.replace('DO', '1') k=0 kmax=0 for i in range(0, len(s)): if s[i]=='1': k=k+1 kmax=max(k, kmax) else: k=0 print(kmax)
Ответ: 174
Задача (Звенья, последнее звено неполное)
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ… (составленной из фрагментов XYZ, последний фрагмент может быть неполным). Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Решение:
Т.к. последнее звено может быть неполным, здесь удобно применить другой алгоритм.
Пусть в начале показания счётчика равно нулю. Если мы находим нужный нам символ в нужной последовательности, то прибавляем к счётчику 1. Если последовательность сбивается, то ставим счётчик в ноль.
На рисунке представлен данный алгоритм. В нижней строке указано показание счётчика в момент анализа символа.
На данном рисунке максимальная длина цепочки нужных символов равна 9.
Видим, что для символа X, когда он находится на своём месте, остаток от деления значения счётчика на 3 равен 0.
Для символа Y, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 1.
Для символа Z, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 2.
Мы смотрим остаток от деления на 3, потому что у нас длина звена равна трём (XYZ).
Таким образом, мы и наш анализ очередного символа привяжем к показанию счётчика:
f=open('24_11.txt') s=f.read() k=0 kmax=0 for i in range(0, len(s)): if (s[i]=='X' and k%3==0) or (s[i]=='Y' and k%3==1) or (s[i]=='Z' and k%3==2): k=k+1 kmax = max(k, kmax) else: if s[i]=='X': k=1 else: k=0 print(kmax)
Важный момент: Если нужную цепочку прервал символ X, то нужно счётчик сразу выставить в 1, иначе может произойти такая ошибка:
Т.е. первые три нужных символа в цепочке алгоритм не засчитал.
Поэтому мы не просто сбрасываем счётчик в ноль, а прописываем условие:
if s[i]=='X': k=1 else: k=0
Ответ: 13
Задача (Полезный приём)
Текстовый файл 24-157.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). Определите символ, который чаще всего встречается в файле между двумя одинаковыми символами. Например, в тексте CCBAABABCBC есть комбинации ABA, BAB, BCB и CBC. Чаще всего – 2 раза – между двумя одинаковыми символами стоит B, в ответе для этого случая надо написать B2 (без пробелов и других разделителей). Если таких символов несколько, выведите тот, который стоит раньше в алфавите.
Решение:
f=open('24-157.txt') s=f.read() a=[0]*150 for i in range(0, len(s)-2): if s[i]==s[i+2]: a[ord(s[i+1])] = a[ord(s[i+1])] + 1 ch='' mx=0 for i in range(0, 150): if a[i]>mx: mx=a[i] ch=chr(i) print(ch, mx)
Здесь мы заводим массив a. Индексы этого массива — это коды ANSI всех букв латинского алфавита (ABC…Z). Ведь, как мы знаем, каждая буква кодируется определённым числом (кодом ANSI). Вот часть этой таблицы.
Например, буква A кодируется кодом 65. Коды увеличиваются в алфавитном порядке на 1. Буква Z кодируется числом 90. Таким образом, 150 ячеек точно хватит для нашего алфавита. Здесь берём с запасом, потому что на экзамене можно точно не вспомнить коды, но достаточно запомнить, что 150 ячеек вполне хватит для заглавных и строчных букв латинского алфавита.
Значит, ячейка 65 отвечает за букву A, ячейка 66 отвечает за букву B и т.д. Если мы встретили букву между двумя одинаковыми буквами, то её ячейка увеличивается на 1.
Функция ord() превращает символ в код ANSI.
После того, как мы прошли всю строку и собрали информацию о наших буквах, нужно пройти массив a и найти наибольшее число в нём.
Здесь мы уже не пользуемся функцией max, а используем условие, потому что нужно кроме максимального числа тянуть ещё один параметр — сам код (переменную i). Функция chr() превращает код ANSI обратно в символ.
Ответ: W1608
Задача (Строки различной длины)
Текстовый файл 24-164.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). Текст разбит на строки различной длины. Необходимо найти строку, содержащую самую длинную цепочку стоящих подряд одинаковых букв. Если таких строк несколько, надо взять ту, которая в файле встретилась раньше. Определите, какая буква встречается в этой строке чаще всего. Если таких букв несколько, надо взять ту, которая стоит раньше в алфавите. Запишите в ответе эту букву, а затем – сколько раз она встречается во всем файле.
Пример. Исходный файл:
ZZQABA
ZALAAC
QRAQUT
В этом примере в первой и второй строках наибольшая длина цепочек одинаковых буквы равна 2 (ZZ в первой строке, AA во второй), в третьей – 1. Берём первую строку, т.к. она находится в файле раньше. В этой строке чаще других встречаются буквы Z и A (по 2 раза), выбираем букву A, т. к. она стоит раньше в алфавите. В ответе для этого примера надо записать A6, так как во всех строках файла буква A встречается 6 раз.
Решение:
Для считывания построчно файла, будем использовать конструкцию, как в задании 17. В начале найдём строчку, содержащую самую длинную цепочку стоящих подряд одинаковых букв.
f=open('24-164.txt') kmax=0 count=0 n=-1 for s in f.readlines(): count=count+1 k=1 for i in range(0, len(s)-1): if s[i]==s[i+1]: k=k+1 if k>kmax: kmax=k n=count else: k=1 print(n)
Получается строка под номером 162. Переменная count считает строки по порядку. В переменную n сохраняем номер нужной строки. Опять пользуемся условием, а не функцией max, т.к. здесь нужно и обновлять kmax, и сохранять значение n. У нас условие строгое k>kmax, значит, сохранится первая строка с наибольшей искомой цепочкой.
f=open('24-164.txt') count=0 a=[0]*150 for s in f.readlines(): count=count+1 k=1 if count==162: for i in range(0, len(s)): a[ord(s[i])] = a[ord(s[i])] + 1 ch='' mx=0 for i in range(0, 150): if a[i] > mx: mx=a[i] ch=chr(i) print(ch)
Теперь нас интересует только строка под номером 162. Далее используем приём из прошлой задачи. Заводим массив a из 150 ячеек и используем таблицу кодов ANSI. Так определяем какая буква встретилась чаще всего в строке под номером 162. Получается буква K.
f=open('24-164.txt') s=f.read() print(s.count('K'))
Осталось найти количестов букв K во всём файле. Для этого используем функцию .count()
Ответ: K36582
В задаче 15 «Задача (Полезный приём)», созданы переменные k и kmax — напрасно, они не используются.
Убрал, по привычке написал.






















