Леонид: Спасибо
20-09-2023
Читать статью
Калужский Александр: Леонид, цикл x повториться 300 раз, цикл..
Леонид: Почему k == 90000 в примере (x > A) ∨ (y..
Внимание! В 2023 году 6 задание было изменено. Актуальный разбор можете посмотреть по этой ссылке
Сегодня посмотрим 6 задание из ЕГЭ по информатике 2022.
В этом уроке мы будем использовать метод перебора для решения различных задач из 6 задания ЕГЭ по информатике 2022.
Решать задачи будем на языке Python.
Определите, при каком наименьшем введённом значении переменной s программа выведет число 23. Для Вашего удобства программа представлена на трёх языках программирования.
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 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; }
Решим задачу с помощью перебора.
Будем подставлять каждое число в диапазоне от 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.
Ещё одна задача-ловушка из 6 задания ЕГЭ по информатике 2022.
Определите, сколько существует целых положительных значений, подаваемых на вход программе, при которых программа выведет 27.
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 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 к разнице двух чисел.
Закрепим метод перебора в 6 задании из ЕГЭ по информатике 2022.
(А.Г. Минак) Определите, при каком введённом значении переменной s программа выведет число 16.
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 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; }
Здесь справляется стандартный перебор от 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)
Счастливых экзаменов!