вентилятор
Хорошего настроения!

ЕГЭ по информатике 2022 - Задание 6 (Метод перебора)




Внимание! В 2023 году 6 задание было изменено. Актуальный разбор можете посмотреть по этой ссылке


Сегодня посмотрим 6 задание из ЕГЭ по информатике 2022.


В этом уроке мы будем использовать метод перебора для решения различных задач из 6 задания ЕГЭ по информатике 2022.


Решать задачи будем на языке Python.





Задача (Классическая)

Определите, при каком наименьшем введённом значении переменной s программа выведет число 23. Для Вашего удобства программа представлена на трёх языках программирования.


ПаскальPythonC++
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;
}

Источник задачи: 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.


ПаскальPythonC++
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.


(80-27)+1=53+1=54

Если проверить на небольших числа, то мы должны прибавить 1 к разнице двух чисел.


Ответ: 54



Закрепим метод перебора в 6 задании из ЕГЭ по информатике 2022.



Задача (Закрепление)

(А.Г. Минак) Определите, при каком введённом значении переменной s программа выведет число 16.


ПаскальPythonC++
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;
}

Источник задачи: 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

Счастливых экзаменов!






22-10-2021 в 17:51:55





Поддержать сайт:


Похожая статья:

ЕГЭ по информатике 2021 - Задание 20 (Юбилейный выпуск!)

Продолжаем решать задачи на теорию игр. Сегодня у нас разбор 20 задани...

Категория: Информатика  Подкатегория: ЕГЭ
Дата: 01-12-2020 в 21:00:43 0


Комментарии:

кстати, во вторую задачу можно поставить счетчик k = 0(перед циклом for i in range(1000, 0, -1)), а в самом цикле while s*n < 243, например, после n = n * 9, написать, что k += 1 так, программа будет считать, сколько раз выполнился цикл)
вставьте текст 15-11-2021 в 17:29:52



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:




Нажимая кнопку Отправить, Вы соглашаетесь с политикой конфиденциальности сайта.