Сегодня посмотрим 6 задание из ЕГЭ по информатике 2022.
В этом уроке мы будем использовать метод перебора для решения различных задач из 6 задания ЕГЭ по информатике 2022.
Решать задачи будем на языке Python.
Задача (Классическая)
Определите, при каком наименьшем введённом значении переменной s программа выведет число 23. Для Вашего удобства программа представлена на трёх языках программирования.
Паскаль | Python | C++ |
---|---|---|
var s, n: integer; begin readln(s); n := 50; while s > 0 do begin s := s div 2; n := n - 3 end; writeln(n) end. |
s = int(input()) n = 50 while s > 0: s = s // 2 n = n - 3 print(n) |
#include <iostream> using namespace std; int main() { int s, n = 50; cin >> s; while (s > 0) { s = s / 2; n = n - 3; } cout << n << endl; return 0; } |
Источник задачи: https://kpolyakov.spb.ru/
Решение:
Решим задачу с помощью перебора.
Будем подставлять каждое число в диапазоне от 1 до 1000 в наш алгоритм с помощью цикла for. Узнаем, при каких значениях на выходе программа будет печатать число 23.
for i in range(1, 1001): s = i n = 50 while s > 0: s = s // 2 n = n - 3 if n==23: print(i)
Вместо команды input() присваиваем в переменную n очередное число. В конце программы вместо команды print() пишем условие. Печатаем только те значения переменной i, которые приводят к тому, что в переменной n будет нужный результат (число 23).
Программа напечатает следующие числа:
256
257
258
259
260
261
262
263
264
265
266
267
268
и т.д.
Самое маленькое число, которое подходит, это 256.
Ответ: 256
Ещё одна задача-ловушка из 6 задания ЕГЭ по информатике 2022.
Задача (С подвохом)
Определите, сколько существует целых положительных значений, подаваемых на вход программе, при которых программа выведет 27.
Паскаль | Python | C++ |
---|---|---|
var s, n: integer; begin readln(s); n := 3; while s*n < 243 do begin s := s div 3; n := n * 9 end; writeln(n) end. |
s = int(input()) n = 3 while s*n < 243: s = s // 3 n = n * 9 print(n) |
#include <iostream> using namespace std; int main() { int s, n = 3; cin >> s; while (s*n < 243) { s = s / 3; n = n * 9; } cout << n << endl; return 0; } |
Решение:
В этой программе подвох заключается в том, что, если мы будем перебирать числа от 1 до 1000, то программа зависнет и ничего не напечатает.
В таких случаях можно попробовать перебрать числа с 1000 до 1.
for i in range(1000, 0, -1): s = i n = 3 while s*n < 243: s = s // 3 n = n * 9 if n==27: print(i)
Третий параметр "-1" для цикла for означает, что мы перебираем числа с 1000 до 1 в обратном порядке.
Программа напечатает числа с 80 до 27.
Если проверить на небольших числа, то мы должны прибавить 1 к разнице двух чисел.
Ответ: 54
Закрепим метод перебора в 6 задании из ЕГЭ по информатике 2022.
Задача (Закрепление)
(А.Г. Минак) Определите, при каком введённом значении переменной s программа выведет число 16.
Паскаль | Python | C++ |
---|---|---|
var s, n: integer; begin readln(s); n := 0; while s*s < 101 do begin s := s + 1; n := n + 2 end; writeln(n) end. |
s = int(input()) n = 0 while s*s < 101: s = s + 1 n = n + 2 print(n) |
#include <iostream> using namespace std; int main() { int s, n = 0; cin >> s; while (s*s < 101) { s = s + 1; n = n + 2; } cout << n << endl; return 0; } |
Источник задачи: https://kpolyakov.spb.ru/
Решение:
Здесь справляется стандартный перебор от 1 до 1000.
for i in range(1, 1001): s = i n = 0 while s*s < 101: s = s + 1 n = n + 2 if n==16: print(i)
Ответ: 3
Счастливых экзаменов!
Оставить коментарий: