Решение первой части егэ по информатике на питоне

Доброго времени суток каждому жителю Хабрвилля! Давненько я не писал статей! Пора это исправить!

В сегодняшней статье поговорим о насущной для многих выпускников школ теме — ЕГЭ. Да-да-да! Я знаю, что Хабр — это сообщество разработчиков, а не начинающих айтишников, но сейчас ребятам как никогда нужна поддержка именно сообщества. Ребят опять посадили на дистант. Пока не ясно на какой период, но уже сейчас можно сказать, что ЕГЭ по информатике будет на компьютерах и его можно зарешать при помощи языка 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)

Отличия:

  1. Выиграл Петя, соответственно, позиция 4

  2. Так как Петя не может выиграть за один ход — он выигрывает за 2 хода (and, а не or на нечётных позициях (играх Пети))

  3. Убрали 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 отличия:

  1. Позиции 3 или 5, а не 4, так как выиграл Ваня

  2. На второй ход выигрывает Ваня и нам нужно 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 пользователей.

РЕШЕНИЕ
ЗАДАЧ компьютерного ЕГЭ НА ЯЗЫКЕ
PYTHON

В
школьном курсе информатики после введения компьютерного ЕГЭ возникла
необходимость «перестроиться» с языка программирования
Pascal на Phyton, который  обладает простым и понятным
синтаксисом и позволяет обрабатывать большие числа, что является необходимым
для решения заданий из блока «Программирование». Для обучающихся была создана
следующая  «памятка»  с описанием синтаксиса операторов
Python  и примерами решений некоторых задач КЕГЭ.

Для
ввода информации пользователем используется функция input() – эта функция
считывает строку из консоли, введенную пользователем. Для вывода результата –
print.

Ниже представлена
таблица с примерами использования:

Функция

Описание

n =
input()

Считывание
данных в переменную n.

Тип по
умолчанию строка.

a =
int(input())

Считывание
целого числа в переменную a.

a =
float(input())

Считывание
вещественного числа в переменную a.

Математические
операции

Операция

Символ

Пример

Возведение
в степень

**

print(6
** 2) # 36

Целая
часть от деления

//

print(7
/ 2) # 3

Остаток
от деления

%

print(8
% 3) # 2

Условный
оператор

image_description

Условий внутри одного оператора может быть несколько, в таком
случае они проверяются последовательно и выполняются команды для того условия,
которое первым окажется истинным:

image_description

Для проверки  условий в
Python используются операторы сравнения:

Символ

Смысл

Пример

==

равно

a == b

!=

не равно

a != b

and

конъюнкция

a > 5
and b < 5

or

дизъюнкция

a > 5
or b < 5

not

логическое
отрицание

 not(b
< 5)

Циклы ПОКА и ДЛЯ

Командное
слово для цикла – while (после условия – двоеточие), а команды цикла
записываются на отступе от строки, инициализирующей цикл.

С
помощью range() можно задавать диапазон значений, которая будет принимать любая
численная переменная с некоторым шагом.

У
функции range всего может быть три аргумента:

·        
Начало (включается в диапазон, по умолчанию равен 0);

·        
Конец (не включается в диапазон);

·        
Шаг (по умолчанию равен 1).

Пример:

Значения range

Сгенерированная последовательность

range(5)

0,
1, 2, 3, 4

range(3,
8)

3,
4, 5, 6, 7

range(2,
10, 2)

2,
4, 6, 8

range(10,
0, -1)

10,
9, 8, 7, 6, 5, 4, 3, 2, 1

Задание
№6 (КЕГЭ)

В задании №6 в блоке «Программирование» проверяется умение
работать с прогрессиями, 

Пример
1
 

Определите, при
каком наибольшем введенном значении переменной s программа
выведет число 1250.

s = int(input())

s = s // 10

n = 1

while n < 400:

    s
= s + n
 

    n
= n * 2

print(s)

Перебираем в цикле for
с большим интервалом переменную
s:

for i in range(100000):

    s = i

    s = s // 10

    n = 1

    while n < 400:

        s = s + n

        n = n * 2

    if s = = 1250:

        print(i)

Вывод
на
экран:

7390

7391

7392

7393

7394

7395

7396

7397

7398

7399

Ответ: 7399

Пример
2

Определите, при каком наименьшем введенном
значении переменной s программа выведет число 310.

s = int(input())

s = s // 10

n = 0

while n <= 56:

    s
= s + n

    n
= n + 7

print(s)

Используем тот же метод решения:

for i in range(100000):

    s = i

    s = s // 10

    n = 0

    while n <= 56:

        s = s + n

        n = n + 7

    if s = = 310:

        print(i)

Вывод
на
экран:

580

581

582

583

584

585

586

587

588

589

Ответ: 580

Пример решения задания №6 из
тренировочной работы системы Статград за 17.12.2021 г.

for i in range(1000000):

    s = i

    s = s // 10

    n = 1

    while s < 221:

        if n % 2 == 0:

            s = s + 13

        n = n + 5

    if n == 121:

        print(i)

Вывод на
экран:

735

736

…..

 779

Ответ: 779

Задание
14 (КЕГЭ)

Данное задание  связано
с переводом из одной позиционной системы счисления в другую и умением работать
с такими системами счисления.

 Метод

Описание

Пример

Получение последней цифры числа

Пусть n – это число, a –
основание системы счисления.

Тогда остаток от деления n на a –
это последняя цифра числа в искомой системе счисления

image_description

Получение числа без последней цифры

Пусть n – это число, a –
основание системы счисления.

Тогда результат деления нацело n на a –
это число без последней цифры в искомой системе счисления, представленное в
10-чной системе счисления.

Например,

8 = 10002

8 // 2 = 4

4 = 1002

Было число, равное 10002 – стало число, равное
1002.

image_description

Разложение числа на разряды в любой системе счисления

Пусть n – это число, a –
основание системы счисления.

Используем программу перебора

image_description

image_description

Пример 1

Сколько единиц
содержится в двоичной записи значения выражения 416 + 236 – 16?

x = 4**16 + 2**36 — 16

k = 0

while x > 0:

    if x % 2 = = 1:

        k += 1

    x = x // 2

print(k)

Ответ:
29

Пример
2

Значение
арифметического выражения: 918 + 354 – 9 – записали в
системе счисления с основанием 3. Сколько цифр «2» содержится в этой записи?

x = 9**18 + 3**54
— 9

k = 0

while x > 0:

    if
x % 3 = = 2:

        k += 1

    x = x // 3

print(k)

Ответ:
34

Пример
3

Значение арифметического выражения: 5 ×
2161156 – 4 × 361147 + 61153 – 875 — записали
в системе счисления с основанием 6. Определите разность между количеством цифр
5 и количеством нулей в записи этого числа.

x = 5 * 216**1156 — 4 *
36**1147 + 6**1153 — 875  

k5 = 0

k0 = 0

while x > 0:

    if x % 6 == 5:

        k5 += 1

    if x % 6 == 0:

        k0 += 1

    x = x // 6

print(k5-k0)

Ответ:
1182

Пример решения задания №14 из
тренировочной работы системы Статград за 17.12.2021 г.

x =3*125**6 + 2*25**9 + 5**12 — 625

k = 0

while x>0:

    d = x % 5

    if d = = 0:

        k +=1

    x = x//5

print(k)

Ответ:
11

Задание
16 (КЕГЭ)

Задание
на рекурсивный алгоритм. Здесь используются функции — именованные наборы
команд, которые записываются один раз и могут быть вызваны из любого места в
программе.

Пример 1

Алгоритм
вычисления значения функции F(n), где n — натуральное число,
задан следующими соотношениями.

F(n) = n + 2 при n ≤ 3;

F(n) = F(n – 2) + F(n – 1) при
n > 3.

Чему
равно значение функции F(30)?

def  F(n):

    if n
<= 3:

       
return n + 2

    else:

       
return F(n — 2) + F(n — 1)

print(F(30))

Ответ: 2374727

Пример 2. Вложенное
ветвление

Алгоритм
вычисления значения функции F(n), где nнатуральное число,
задан следующими соотношениями.

F(n)
= 3
n + 6 при n ≤ 2;

F(n)
= F(n – 2) + 2
F(n
– 1) при n > 2 и n — четное число;

F(n)
= 10 + F(n – 4) при n > 2 и n — нечетное число.

Чему равно
значение функции F(18)?

def F(n):

    if n
<= 2:

       
return 3*n + 6

    else:

        if
n % 2 == 0:

           
return F(n — 2) + 2*F(n — 1)

       
else:

           
return 10 + F(n — 4)

print(F(18))

Ответ:
508

Пример 3. Перекрестные
функции

Алгоритмы
вычисления значения функций
F(n)
и
G(n),
где
n
— натуральное число, заданы следующими соотношениями.

F(n)
=
n
+ 9 при
n < 3;

F(n)
= 2
F(n
– 1) + 3
G(n
– 2) при
n ≥ 3.

G(n)
= 25 –
n при n
< 4;

G(n)
= 4
G(n
– 1) –
F(n
– 2) при
n ≥ 4.

Чему равно
значение функции
G(13)?

def F(n):

    if n
< 3:

       
return n + 9

    else:

       
return 2*F(n — 1) + 3*G(n — 2)

def G(n):

    if n
< 4:

       
return 25 — n

    else:

       
return 4*G(n — 1) — F(n — 2)

print(G(13))

Ответ:
3781546

Пример 4. Перекрестные функции. Сумма значений

Алгоритмы
вычисления значения функций
F(n) и G(n), где n — натуральное число, заданы следующими соотношениями.

F(n) = n + 3 при n < 4;

F(n) = F(n – 4) + 3 G(n – 2) + G(n – 1) при n ≥ 4.

G(n) = 3 n при n < 5;

G(n) = F(n – 1) + G(n – 3) – F(n – 2) при n ≥ 5.

Чему
равна сумма значений функций
G(20) и F(18)?

def F(n):

    if n
< 4:

       
return n + 3

    else:

       
return F(n — 4) + 3*G(n — 2) + G(n — 1)

def G(n):

    if n
< 5:

       
return 3*n

    else:

       
return F(n — 1) + G(n — 3) — F(n — 2)

print(F(18)
+ G(20))

Ответ:
4075

Пример решения задания №16 из
тренировочной работы системы Статград за 17.12.2021 г.

def F(n):

    if n ==
0:

       
return 0

    if n %
3 == 2:

       
return F(n — 1) + 1

    if n %
3 < 2:

       
return F((n — n % 3) // 3)

for i in
range(10000):

    if F(i)
= = 6:

       
print
(i)

       
break

Ответ:
728

 Задание
2 (КЕГЭ)

Пример решения задания №2 из
тренировочной работы системы Статград за 17.12.2021 г.

Переборный алгоритм позволяет получить
таблицу для ложных значений функции
F,
которую необходимо соотнести с таблицей в задании.

print(‘x y w z’)

for x in range(2):

    for y in range(2):

        for w in
range(2):

            for z in
range(2):

                if
(((x<=y) and (z or w)) <= ((x == w) or (y and not(z)))) = = 0:

                    print(x,y,w,z)

Вывод на экран:

x y w z

0
0 1 0

0
0 1 1

0
1 1 1

1
1 0 1

Ответ: yxwz

Шаблоны программ для задач в ЕГЭ по Информатике на Python

В текущей версии ЕГЭ довольно много заданий, которые можно (а иногда и обязательно) сделать на компьютере, однако их можно существенно упростить, если знать шаблон, в который достаточно дописать условие данной задачи. В этом репозитории я постараюсь собрать все шаблоны, которые были придуманы учителями и учениками в ходе подготовки (а через раздел «Issues» можно предложить и свои шаблоны).
Скачать шаблоны и примеры в формате .py можно, нажав кнопку Code и в ней Download ZIP. Все примеры будут лежать в папке examples, а шаблоны в templates.

Задания

Задание №2

Задание №6

Задание №12

Задание №14

Задание №16

Задание №17

Задание №19-21

Задание №22

Задание №23

Благодарности

Сайту РешуЕГЭ за предоставленные задания

Детальный разбор ВСЕХ заданий из первой части (№ 1-23), с решением до 30 прототипов каждого номера! В курсе есть ВСЯ необходимая теория по Python 3 и «Электронным Таблицам», а также предложены самые простые, НО эффективные способы решения.

What you will learn

  • Научитесь мыслить логически и решать задания аналитически
  • Научитесь пользоваться Excel и LibreOffice
  • Изучите все необходимые особенности Python 3
  • Научитесь писать простые программы для решения КИМа
  • Примените теорию на практике
  • Узнаете как можно проверить своё решение
  • Сможете легко решить все задания «Первой Части» ЕГЭ

About this course

Видеокурс по 1-23 заданиям — это полноценный курс, в ходе которого мы подготовим вас ко ВСЕМ темам КАЖДОГО задания «Первой Части» с ПОЛНОГО НУЛЯ! Каждая тема будет понятна даже НОВИЧКУ, ведь обучение включает в себя :

  • ТЕОРИЮ как по основам программирования и электронными таблицам, так и по каждому заданию отдельно
  • ПРАКТИКУ с разбором до 30 прототипов всех заданий с 1 по 23
  • КОНСПЕКТЫ, которые позволят легко повторить материал
  • МИНИ ЭКЗАМЕН в конце каждой темы для проверки своих знаний
  • 5 ВАРИАНТОВ ЕГЭ по информатике по заданиями 1-23 ( с видео-разбором ), чтобы у вас была возможность испытать себя после прохождения курса

💖 Не стесняйтесь задавать любые вопросы в комментариях к курсу или же в нашей Беседе в VK

👪Перейти в нашу Беседу в VK👈

✨Перейти в нашу Группу в VK👈

💯Посмотреть Отзывы Наших Учеников👈

✅ Пройдя курс, вы полноценно освоите язык программирования Python 3, изучите самые оптимальные, простые, но при этом эффективные способы решения каждого задания с 1 по 23, используя при этом как аналитическое решение (на листочке), так и программное (с помощью Python 3), а также научитесь пользоваться такими электронными таблицами, как Excel и LibreOffice

✅ Часть курса вы можете даже протестировать абсолютно БЕСПЛАТНО. Благодаря этому у вас появляется возможность оценить качество нашего обучения ещё до покупки полноценного курса!

❌Получить Бесплатно «Блок 1» (40+ Баллов с Нуля)👈

❌Получить Бесплатно «Блок 3» (Весь Python 3 для ЕГЭ)👈

🔥 Что вас ждёт на курсе? 👇 (Более подробное содержание в нашей группе в VK)

  • Блок 1 — Самые Лёгкие Задания ( Задания 1, 13, 4, 7, 11, 10 ) ~ 6 часов
  • Блок 2 — Решение в Электронных Таблицах ( Задания 3, 9, 18 ) ~ 5 часов
  • Блок 3 — Изучение Python 3 ( Вся Необходимая для ЕГЭ Теория ) ~ 4 часа 30 мин.
  • Блок 4 — Программное Решение ( Задания 6, 22, 12, 14, 16, 5, 23, 17 ) ~ 7 часов
  • Блок 5 — Комбинаторика ( Задание 8 ) ~ 2 часа
  • Блок 6 — Алгебра Логики ( Задания 2, 15 ) ~ 5 часов
  • Блок 7 — Теория Игр ( Задания 19, 20, 21 ) ~ 5 часов
  • Блок 8 — Практика ( 5 Вариантов с Разбором )

❗ ВНИМАНИЕ!

  • У курса нет старта. Вы можете начать его проходить в любой момент
  • У курса нет подписок по месяцам. После покупки курса, вы получаете доступ к нему навсегда
  • На курсе мы сначала рассказываем теорию, потом даём решить задачу, а после делаем видео-разбор с её решением
  • На курсе задания проверяются автоматически. Ждать проверки преподавателем не нужно

📚 Источники Задач :

  • Сайт kompege.ru
  • Сайт kpolyakov.spb.ru
  • Реальные ЕГЭ Демо-версии Досрочные волны Резервные дни Апробации
  • СтатГрады Авторские Задачи

Whom this course is for

Курс создан для Школьников 10-11 классов, учителей и всех остальных, желающих сдавать ЕГЭ по Информатике

Initial requirements

Никакие начальные требования не нужны. Научим с полного нуля, в том числе и языку программирования Python 3, и электронным таблицам

Meet the Instructors

How you will learn

  • При переходе к каждому новому заданию вы сначала получаете всю необходимую для его решения теорию, потом мы даём от 22 до 30 прототипов этого задания и к каждому прототипу делаем видео-разбор
  • В конце каждой темы вы сможете проверить свои знания, решив мини-экзамен
  • В конце курса вы сможете испытать себя, решив 5 вариантов ЕГЭ по Информатике по заданиям 1-23 (с видео-разбором)
  • В комментариях вы можете посмотреть чужие решения, чтобы лучше разобраться в теме, или даже прислать своё решение
  • Во время обучения у вас есть возможность задать преподавателю любой вопрос

Course content

Certificate

Certificate

«Теперь я Легко Решу Первую Часть»

What you will get

Price

FAQ

Share this course

https://stepik.org/course/121057/promo

Версия для печати и копирования в MS Word

1

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

DECLARE FUNCTION F(n)

DECLARE FUNCTION G(n)

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n — 1) + G(n-2)

  ELSE

    F = 1

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n — 1) + F(n-2)

  ELSE

    G = 1

  END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n-1)+ G(n-2)

    else: return 1

def G(n):

    if n > 2:

        return G(n-1) + F(n-2)

    else: return 1

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

  if n > 2 then

    F := F(n — 1) + G(n — 2)

  else

    F := 1;

end;

function G(n: integer): integer;

begin

  if n > 2 then

    G := G(n — 1) + F(n — 2)

  else

    G := 1;

end;

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n — 1) + G(n — 2)

    иначе

      знач := 1

  все

кон

алг цел G(цел n)

нач

  если n > 2

    то

      знач := G(n — 1) + F(n — 2)

    иначе

      знач := 1

  все

кон

Си

int F(int n)

{

  if (n > 2)

    return F(n-1) + G(n-2);

  else return 1;

}

int G(int n)

{

  if (n > 2)

    return G(n-1) + F(n-2);

  else return 1;

}

Чему будет равно значение, вычисленное при выполнении вызова F(7)?

Ответ:


2

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

DECLARE FUNCTION F(n)

DECLARE FUNCTION G(n)

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n — 1) + G(n-2)

  ELSE

    F = 1

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n — 1) + F(n-2)

  ELSE

    G = 1

  END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n-1)+ G(n-2)

    else: return 1

def G(n):

    if n > 2:

        return G(n-1) + F(n-2)

    else: return 1

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

  if n > 2 then

    F := F(n — 1) + G(n — 2)

  else

    F := 1;

end;

function G(n: integer): integer;

begin

  if n > 2 then

    G := G(n — 1) + F(n — 2)

  else

    G := 1;

end;

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n — 1) + G(n — 2)

    иначе

      знач := 1

  все

кон

алг цел G(цел n)

нач

  если n > 2

    то

      знач := G(n — 1) + F(n — 2)

    иначе

      знач := 1

  все

кон

Си

int F(int n)

{

  if (n > 2)

    return F(n-1) + G(n-2);

  else return 1;

}

int G(int n)

{

  if (n > 2)

    return G(n-1) + F(n-2);

  else return 1;

}

Чему будет равно значение, вычисленное при выполнении вызова F(8)?

Ответ:


3

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n — 1) + G(n — 2)

  ELSE

    F = n

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n — 1) + F(n — 2)

  ELSE

    G = n + 1

  END IF

END FUNCTION

def F(n):

  if n > 2:

    return F(n-1) + G(n-2)

  else: return n

def G(n):

  if n > 2:

    return G(n-1) + F(n-2)

  else: return n+1

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

  if n > 2 then

    F := F(n — 1) + G(n — 2)

  else

    F := n;

end;

function G(n: integer): integer;

begin

  if n > 2 then

    G := G(n — 1) + F(n — 2)

  else

    G := n+1;

end;

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n — 1)+G(n — 2)

    иначе

      знач := n

  все

кон

алг цел G(цел n)

нач

  если n > 2

    то

      знач := G(n — 1)+F(n — 2)

    иначе

      знач := n+1

  все

кон

Си

int F(int n)

{

  if (n > 2)

    return F(n-1) + G(n-2);

  else return n;

}

int G(int n)

{

  if (n > 2)

    return G(n-1) + F(n-2);

  else return n + 1;

}

Чему будет равно значение, вычисленное при выполнении вызова F(6)?

Ответ:


4

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n — 1) + G(n — 2)

  ELSE

    F = n

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n — 1) + F(n — 2)

  ELSE

    G = n + 1

  END IF

END FUNCTION

def F(n):

  if n > 2:

    return F(n-1) + G(n-2)

  else: return n

def G(n):

  if n > 2:

    return G(n-1) + F(n-2)

  else: return n+1

Паскаль Алгоритмический язык

function G(n:integer): integer; forward;

function F(n: integer): integer;

begin

  if n > 2 then

    F := F(n — 1) + G(n — 2)

  else

    F := n;

end;

function G(n: integer): integer;

begin

  if n > 2 then

    G := G(n — 1) + F(n — 2)

  else

    G := n+1;

end;

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n — 1)+G(n — 2)

    иначе

      знач := n

  все

кон

алг цел G(цел n)

нач

  если n > 2

    то

      знач := G(n — 1)+F(n — 2)

    иначе

      знач := n+1

  все

кон

Си

int F(int n)

{

  if (n > 2)

    return F(n-1) + G(n-2);

  else return n;

}

int G(int n)

{

  if (n > 2)

    return G(n-1) + F(n-2);

  else return n + 1;

}

Чему будет равно значение, вычисленное при выполнении вызова G(6)?

Ответ:


5

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n-1)+G(n-1)+F(n-2)

  ELSE

    F = n

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n-1)+F(n-1)+G(n-2)

  ELSE

    G = n+1

  END IF

END FUNCTION

def F(n):

  if n > 2:

    return F(n-1)+G(n-1)+F(n-2)

  else: return n

def G(n):

  if n > 2:

    return G(n-1)+F(n-1)+G(n-2)

  else: return n+1

Паскаль Алгоритмический язык

function F(n: integer):

integer;

begin

  if n > 2 then

    F := F(n-1)+G(n-1)+F(n-2)

  else

    F := n;

end;

function G(n: integer):

integer;

begin

  if n > 2 then

    G := G(n-1)+F(n-1)+G(n-2)

  else

    G := n+1;

end;

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n-1)+G(n-1)+F(n-2)

    иначе

      знач := n

  все

кон

алг цел G(цел n)

нач

  если n > 2

  то

    знач := G(n-1)+F(n-1)+G(n-2)

  иначе

    знач := n+1

  все

кон

Си

int F(int n) {

  if (n > 2)

    return F(n-1)+G(n-1)+F(n-2);

  else return n;

}

int G(int n){

  if (n > 2)

    return G(n-1)+F(n-1)+G(n-2);

  else return n+1;

}

Чему будет равно значение, вычисленное при выполнении вызова G(5)?

Ответ:


6

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n-1)+G(n-1)+F(n-2)

  ELSE

    F = n

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n-1)+F(n-1)+G(n-2)

  ELSE

    G = n+1

  END IF

END FUNCTION

def F(n):

  if n > 2:

    return F(n-1)+G(n-1)+F(n-2)

  else: return n

def G(n):

  if n > 2:

    return G(n-1)+F(n-1)+G(n-2)

  else: return n+1

Паскаль Алгоритмический язык

function F(n: integer):

integer;

begin

  if n > 2 then

    F := F(n-1)+G(n-1)+F(n-2)

  else

    F := n;

end;

function G(n: integer):

integer;

begin

  if n > 2 then

    G := G(n-1)+F(n-1)+G(n-2)

  else

    G := n+1;

end;

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n-1)+G(n-1)+F(n-2)

    иначе

      знач := n

  все

кон

алг цел G(цел n)

нач

  если n > 2

  то

    знач := G(n-1)+F(n-1)+G(n-2)

  иначе

    знач := n+1

  все

кон

Си

int F(int n) {

  if (n > 2)

    return F(n-1)+G(n-1)+F(n-2);

  else return n;

}

int G(int n){

  if (n > 2)

    return G(n-1)+F(n-1)+G(n-2);

  else return n+1;

}

Чему будет равно значение, вычисленное при выполнении вызова F(5)?

Ответ:


7

Ниже на пяти языках программирования записаны рекурсивные функции F и G.

Бейсик Python

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n-1)+G(n-1)+F(n-2)

  ELSE

    F = n

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n-1)+F(n-1)+G(n-2)

  ELSE

    G = 3-n

  END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n-1)+G(n-1)+F(n-2)

    else: return n

def G(n):

    if n > 2:

        return G(n-1)+F(n-1)+G(n-2)

    else: return 3-n

Алгоритмический язык Паскаль

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n-1)+G(n-1)+F(n-2)

    иначе

      знач := n

    все

кон

алг цел G(цел n)

нач

  если n > 2

    то

      знач := G(n-1)+F(n-1)+G(n-2)

    иначе

      знач := 3-n

  все

кон

function F(n: integer): integer;

begin

  if n > 2 then

    F := F(n-1)+G(n-1)+F(n-2)

  else

    F := n;

end;

function G(n: integer): integer;

begin

  if n > 2 then

    G := G(n-1)+F(n-1)+G(n-2)

  else

    G := 3-n;

end;

Си

int F(int n){

if (n > 2)

return F(n-1)+G(n-1)+F(n-2);

else return n;

}

int G(int n){

if (n > 2)

return G(n-1)+F(n-1)+G(n-2);

else return 3-n;

}

Чему будет равно значение, вычисленное при выполнении вызова G(5)?

Ответ:


8

Ниже на пяти языках программирования записаны рекурсивные функции F и G.

Бейсик Python

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n-1)+G(n-1)+F(n-2)

  ELSE

    F = n

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n-1)+F(n-1)+G(n-2)

  ELSE

    G = 3-n

  END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n-1)+G(n-1)+F(n-2)

    else: return n

def G(n):

    if n > 2:

        return G(n-1)+F(n-1)+G(n-2)

    else: return 3-n

Алгоритмический язык Паскаль

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n-1)+G(n-1)+F(n-2)

    иначе

      знач := n

    все

кон

алг цел G(цел n)

нач

  если n > 2

    то

      знач := G(n-1)+F(n-1)+G(n-2)

    иначе

      знач := 3-n

  все

кон

function F(n: integer): integer;

begin

  if n > 2 then

    F := F(n-1)+G(n-1)+F(n-2)

  else

    F := n;

end;

function G(n: integer): integer;

begin

  if n > 2 then

    G := G(n-1)+F(n-1)+G(n-2)

  else

    G := 3-n;

end;

Си

int F(int n){

if (n > 2)

return F(n-1)+G(n-1)+F(n-2);

else return n;

}

int G(int n){

if (n > 2)

return G(n-1)+F(n-1)+G(n-2);

else return 3-n;

}

Чему будет равно значение, вычисленное при выполнении вызова F(5)?

Ответ:


9

Ниже записаны две рекурсивные функции, F и G:

function F(n: integer): integer;

 begin

  if (n > 2) then F := F(n — 1) + G(n — 1) + F(n-2)

 else

F := n;

 end;

function G(n: integer): integer;

 begin

  if (n > 2) then G := G(n — 1) + F(n — 1) + G(n-2)

 else

G := n;

 end;

Чему будет равно значение, вычисленное при выполнении вызова F(5)?

Ответ:


10

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

 FUNCTION F(n)

  IF n > 2 THEN

    F = F(n — 1) +G(n — 2)

  ELSE

     F = 2

  END IF

 END FUNCTION

 FUNCTION G(n)

  IF n > 2 THEN

    G = G(n — 1) +F(n — 2)

  ELSE

     G = 2

  END IF

 END FUNCTION

def F(n):

    if n > 2:

      return F(n-1) + G(n-2)

    else: return 2

def G(n):

    if n > 2:

      return G(n-1) + F(n-2)

    else: return 2

Паскаль Алгоритмический язык

function F(n : integer): integer;

 begin

  if n > 2 then

   F := F(n — 1) + G(n — 2)

  else

   F := 2;

 end;

function G(n : integer): integer;

 begin

  if n > 2 then

   G := G(n — 1) + F(n — 2)

  else

   G := 2;

 end;

алг цел F(цел n)

 нач

  если n > 2

  то

    знач:= F(n-1) + G(n-2)

  иначе

    знач:=2

  все

 кон

алг цел G(цел n)

 нач

  если n > 2

  то

    знач:= G(n-1) + F(n-2)

  иначе

    знач:=2

  все

 кон

Си

int F(int n) {

    if (n > 2)

     return F(n-1) + G(n-2);

    else

     return 2;

}

int G(int n) {

    if (n > 2)

     return G(n-1) + F(n-2);

    else

     return 2;

}

Чему будет равно значение, вычисленное при выполнении вызова F(6)?

Ответ:


11

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

 FUNCTION F(n)

  IF n > 2 THEN

    F = F(n — 1) +G(n — 2)

  ELSE

     F = 2

  END IF

 END FUNCTION

 FUNCTION G(n)

  IF n > 2 THEN

    G = G(n — 1) +F(n — 2)

  ELSE

     G = 2

  END IF

 END FUNCTION

def F(n):

    if n > 2:

      return F(n-1) + G(n-2)

    else: return 2

def G(n):

    if n > 2:

      return G(n-1) + F(n-2)

    else: return 2

Паскаль Алгоритмический язык

function F(n : integer): integer;

 begin

  if n > 2 then

   F := F(n — 1) + G(n — 2)

  else

   F := 2;

 end;

function G(n : integer): integer;

 begin

  if n > 2 then

   G := G(n — 1) + F(n — 2)

  else

   G := 2;

 end;

алг цел F(цел n)

 нач

  если n > 2

  то

    знач:= F(n-1) + G(n-2)

  иначе

    знач:=2

  все

 кон

алг цел G(цел n)

 нач

  если n > 2

  то

    знач:= G(n-1) + F(n-2)

  иначе

    знач:=2

  все

 кон

Си

int F(int n) {

    if (n > 2)

     return F(n-1) + G(n-2);

    else

     return 2;

}

int G(int n) {

    if (n > 2)

     return G(n-1) + F(n-2);

    else

     return 2;

}

Чему будет равно значение, вычисленное при выполнении вызова G(6)?

Ответ:


12

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

 FUNCTION F(n)

  IF n > 1 THEN

    F = F(n — 1) +G(n — 1)

  ELSE

     F = n

  END IF

 END FUNCTION

 FUNCTION G(n)

  IF n > 1 THEN

    G = G(n — 1) +F(n)

  ELSE

     G = n

  END IF

 END FUNCTION

def F(n):

    if n > 1:

      return F(n-1) + G(n-1)

    else: return n

def G(n):

    if n > 1:

      return G(n-1) + F(n)

    else: return n

Паскаль Алгоритмический язык

function F (n : integer) : integer;

 begin

  if n > 1 then

   F := F(n — 1) + G(n — 1)

  else

   F := n;

 end;

function G (n : integer) : integer;

 begin

  if n > 1 then

   G := G(n — 1) + F(n)

  else

   G := n;

 end;

алг цел F(цел n)

 нач

  если n > 1

  то

    знач:= F(n-1) + G(n-1)

  иначе

    знач:=n

  все

 кон

алг цел G(цел n)

 нач

  если n > 1

  то

    знач:= G(n-1) + F(n)

  иначе

    знач:=n

  все

 кон

Си

int F(int n) {

    if (n > 1)

     return F(n-1) + G(n-1);

    else

     return n;

}

int G(int n) {

    if (n > 1)

     return G(n-1) + F(n);

    else

     return n;

}

Чему будет равно значение, вычисленное при выполнении вызова F(5)?

Ответ:


13

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

 FUNCTION F(n)

  IF n > 1 THEN

    F = F(n — 1) +G(n — 1)

  ELSE

     F = n

  END IF

 END FUNCTION

 FUNCTION G(n)

  IF n > 1 THEN

    G = G(n — 1) +F(n)

  ELSE

     G = n

  END IF

 END FUNCTION

def F(n):

    if n > 1:

      return F(n-1) + G(n-1)

    else: return n

def G(n):

    if n > 1:

      return G(n-1) + F(n)

    else: return n

Паскаль Алгоритмический язык

function F (n : integer) : integer;

 begin

  if n > 1 then

   F := F(n — 1) + G(n — 1)

  else

   F := n;

 end;

function G (n : integer) : integer;

 begin

  if n > 1 then

   G := G(n — 1) + F(n)

  else

   G := n;

 end;

алг цел F(цел n)

 нач

  если n > 1

  то

    знач:= F(n-1) + G(n-1)

  иначе

    знач:=n

  все

 кон

алг цел G(цел n)

 нач

  если n > 1

  то

    знач:= G(n-1) + F(n)

  иначе

    знач:=n

  все

 кон

Си

int F(int n) {

    if (n > 1)

     return F(n-1) + G(n-1);

    else

     return n;

}

int G(int n) {

    if (n > 1)

     return G(n-1) + F(n);

    else

     return n;

}

Чему будет равно значение, вычисленное при выполнении вызова G(5)?

Ответ:


14

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n-1) +G (n-2)

  ELSE

    F = n

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n-1) + F(n-2)

  ELSE

    G = 3-n

  END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n-1) + G(n-2)

    else: return n

def G(n):

    if n > 2:

        return G(n-1) + F(n-2)

    else: return 3-n

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

  if n > 2 then

      F := F(n-1) + G(n-2)

  else

      F := n;

end;

function G(n: integer): integer;

begin

  if n > 2 then

    G := G(n-1) + F(n-2)

  else

      G := 3-n;

end;

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n-1) + G(n-2)

    иначе

      знач := n

  все

кон

алг цел G(цел n)

нач

  если n > 2

    то

      знач := G(n-1) + F(n-2)

    иначе

      знач := 3-n

  все

кон

Си

int F(int n) {

    if (n > 2)

        return F(n-1) + G(n-2);

    else return n;

}

int G(int n) {

    if (n > 2)

        return G(n-1) + F(n-2);

    else return 3-n;

}

Чему будет равно значение, вычисленное при выполнении вызова G(6)?

Ответ:


15

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

FUNCTION F(n)

  IF n > 2 THEN

    F = F(n-1) +G (n-2)

  ELSE

    F = n

  END IF

END FUNCTION

FUNCTION G(n)

  IF n > 2 THEN

    G = G(n-1) + F(n-2)

  ELSE

    G = 3-n

  END IF

END FUNCTION

def F(n):

  if n > 2:

    return F(n-1) + G(n-2)

  else: return n

def G(n):

  if n > 2:

    return G(n-1) + F(n-2)

  else: return 3-n

Паскаль Алгоритмический язык

function F(n: integer): integer; forward;

function G(n: integer): integer; forward;

function F(n: integer): integer;

begin

if n>2 then

F:=F(n-1)+G(n-2)

else

F:=n;

end;

function G(n:integer):integer;

begin

if n>2 then

G:=G(n-1)+F(n-2)

else

G:=3-n;

end;

алг цел F(цел n)

нач

  если n > 2

    то

      знач := F(n-1) + G(n-2)

    иначе

      знач := n

  все

кон

алг цел G(цел n)

нач

  если n > 2

    то

      знач := G(n-1) + F(n-2)

    иначе

      знач := 3-n

  все

кон

Си

int F(int n) {

  if (n > 2)

    return F(n-1) + G(n-2);

  else return n;

}

int G(int n) {

  if (n > 2)

    return G(n-1) + F(n-2);

  else return 3-n;

}

Чему будет равно значение, вычисленное при выполнении вызова F(6)?

Ответ:


16

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

FUNCTION F(n)

    IF n > 2 THEN

        F = F(n — 1) + G(n — 2)

    ELSE

        F = n

    END IF

END FUNCTION

FUNCTION G(n)

    IF n > 2 THEN

        G = G(n — 1) + F(n — 2)

    ELSE

        G = n+1

    END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n — 1)+ G(n — 2)

    else: return n

def G(n):

    if n > 2:

        return G(n — 1)+ F(n — 2)

    else: return n+1

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

    if n > 2 then

        F := F(n — 1) + G(n — 2)

    else

        F := n;

end;

function G(n: integer): integer;

begin

    if n > 2 then

        G := G(n — 1) + F(n — 2)

    else

        G := n+1;

end;

алг цел F(цел n)

нач

    если n > 2

        то

            знач := F(n — 1)+G(n — 2)

        иначе

            знач := n

    все

кон

алг цел G(цел n)

нач

    если n > 2

        то

            знач := G(n — 1)+F(n — 2)

        иначе

            знач := n+1

    все

кон

Си

int F(int n)

{

if (n > 2)

return F(n — 1) + G(n — 2);

else return n;

}

int G(int n)

{

if (n > 2)

return G(n — 1) + F(n -2);

else return n+1;

}

Чему будет равно значение, вычисленное при выполнении вызова F(6)?

Ответ:


17

Ниже на пяти языках программирования записаны две рекурсивные функции: F и G.

Бейсик Python

FUNCTION F(n)

    IF n > 2 THEN

        F = F(n — 1) + G(n — 2)

    ELSE

        F = n

    END IF

END FUNCTION

FUNCTION G(n)

    IF n > 2 THEN

        G = G(n — 1) + F(n — 2)

    ELSE

        G = n+1

    END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n — 1)+ G(n — 2)

    else: return n

def G(n):

    if n > 2:

        return G(n — 1)+ F(n — 2)

    else: return n+1

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

    if n > 2 then

        F := F(n — 1) + G(n — 2)

    else

        F := n;

end;

function G(n: integer): integer;

begin

    if n > 2 then

        G := G(n — 1) + F(n — 2)

    else

        G := n+1;

end;

алг цел F(цел n)

нач

    если n > 2

        то

            знач := F(n — 1)+G(n — 2)

        иначе

            знач := n

    все

кон

алг цел G(цел n)

нач

    если n > 2

        то

            знач := G(n — 1)+F(n — 2)

        иначе

            знач := n+1

    все

кон

Си

int F(int n)

{

if (n > 2)

return F(n — 1) + G(n — 2);

else return n;

}

int G(int n)

{

if (n > 2)

return G(n — 1) + F(n -2);

else return n+1;

}

Чему будет равно значение, вычисленное при выполнении вызова G(6)?

Ответ:


18

Ниже на пяти языках программирования записаны рекурсивные функции F и G.

Бейсик Python

FUNCTION F(n)

    IF n > 2 THEN

        F = F(n — 1) + G(n — 2)

    ELSE

        F = n+1

    END IF

END FUNCTION

FUNCTION G(n)

    IF n > 2 THEN

        G = G(n — 1) + F(n — 2)

    ELSE

        G = n

    END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n — 1)+ G(n — 2)

    else: return n+1

def G(n):

    if n > 2:

        return G(n — 1)+ F(n — 2)

    else: return n

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

    if n > 2 then

        F := F(n — 1) + G(n — 2)

    else

        F := n+1;

end;

function G(n: integer): integer;

begin

    if n > 2 then

        G := G(n — 1) + F(n — 2)

    else

        G := n;

end;

алг цел F(цел n)

нач

    если n > 2

        то

            знач := F(n — 1)+G(n — 2)

        иначе

            знач := n+1

    все

кон

алг цел G(цел n)

нач

    если n > 2

        то

            знач := G(n — 1)+F(n — 2)

        иначе

            знач := n

    все

кон

Си

int F(int n)

{

if (n > 2)

return F(n — 1) + G(n — 2);

else return n+1;

}

int G(int n)

{

if (n > 2)

return G(n — 1) + F(n -2);

else return n;

}

Чему будет равно значение, вычисленное при выполнении вызова F(7)?

Ответ:


19

Ниже на пяти языках программирования записаны рекурсивные функции F и G.

Бейсик Python

FUNCTION F(n)

    IF n > 2 THEN

        F = F(n — 1) + G(n — 2)

    ELSE

        F = n+1

    END IF

END FUNCTION

FUNCTION G(n)

    IF n > 2 THEN

        G = G(n — 1) + F(n — 2)

    ELSE

        G = n

    END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n — 1)+ G(n — 2)

    else: return n+1

def G(n):

    if n > 2:

        return G(n — 1)+ F(n — 2)

    else: return n

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

    if n > 2 then

        F := F(n — 1) + G(n — 2)

    else

        F := n+1;

end;

function G(n: integer): integer;

begin

    if n > 2 then

        G := G(n — 1) + F(n — 2)

    else

        G := n;

end;

алг цел F(цел n)

нач

    если n > 2

        то

            знач := F(n — 1)+G(n — 2)

        иначе

            знач := n+1

    все

кон

алг цел G(цел n)

нач

    если n > 2

        то

            знач := G(n — 1)+F(n — 2)

        иначе

            знач := n

    все

кон

Си

int F(int n)

{

if (n > 2)

return F(n — 1) + G(n — 2);

else return n+1;

}

int G(int n)

{

if (n > 2)

return G(n — 1) + F(n -2);

else return n;

}

Чему будет равно значение, вычисленное при выполнении вызова G(7)?

Ответ:


20

Ниже на пяти языках программирования записана рекурсивная функция F.

Бейсик Python

FUNCTION F(n)

    IF n > 2 THEN

         F = F(n-2) + F(n2)

     ELSE

         F = n

    END IF

END FUNCTION

def F(n):

    if n > 2:

        return F(n-2) + F(n//2)

    else:

        return n

Паскаль Алгоритмический язык

function F(n: integer): integer;

begin

    if n > 2 then

        F := F(n-2) + F(n div 2)

    else

        F := n

end;

алг цел F(цел n)

нач

    если n > 2

        то

         знач := F(n-2) + F(div(n,2))

        иначе

            знач := n

    все

кон

Си

int F(int n)

{

    if (n > 2)

        return F(n-2) + F(n/2);

    else

        return n;

}

Чему будет равно значение, вычисленное при выполнении вызова F(9)?

Ответ:

Завершить тестирование, свериться с ответами, увидеть решения.

Решение на python задач с номером 25 из демо вариантов егэ по информатике 

Решение на Python задачи 25 на программирование из демоверсии егэ по информатике за 2019 год

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать натуральные значения от 1 до 10 000 включительно. Опишите  на одном из языков программирования алгоритм, который находит минимум среди элементов массива, не делящихся нацело на 6, а затем заменяет каждый элемент, не делящийся нацело на 6, на число, равное найденному минимуму. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов:  14  6  11  18  9  24  программа должна вывести следующий массив   9 6 9 18 9 24
Организуем ввод массива заданной длины с клавиатуры. Подробно о работе с массивами в Python
a = []
n=30
for i in range(0, n):
    a.append(int(input()))

Введем переменную для определения минимума для числа не делящегося на 6, вначале программы присвоим ей  максимально возможное значение  
min=10000
В цикле for переберем все элементы массива. С помощью оператора условия If определим делится ли данный элемента на 6 (чтобы элемент не делился на 6 необходимо выполнение условии a[i]%6!=0 )и является ли он меньше текущего минимума(a[i]<min). Если данное двойное условие выполняется, то текущему минимуму  присваиваем значение данного элемента массива (min=a[i]). Чтобы двойное условие в If выполнялось необходимо использовать логическую операцию and
min=10000
for i in range(0, n):
    if a[i]%6!=0 and a[i]<min:
       min=a[i]

Чтобы заменить все элементы массива не кратные 6 на найденный минимум в новом цикле for перебираем все элементы массива и с помощью оператора If проверяем не делится ли на 6 данный элемент, если делится то заменяем его на min,  в этом же цикле и выводим на экран элементы массива
for i in range(0, n):
    if a[i]%6!=0:
       a[i]=min
    print(a[i])

Полная программа на python для задачи 25 из демо версии егэ по информатике за 2019 год
a = []
n=30
for i in range(0, n):
    a.append(int(input()))
min=10000
for i in range(0, n):
    if a[i]%6!=0 and a[i]<min:
       min=a[i] 
for i in range(0, n):
    if a[i]%6!=0:
       a[i]=min
    print(a[i])

 Решение на Python задачи 25 на программирование  из демоверсии егэ по информатике за 2018 год

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, больших 100 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденному количеству. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести измененный массив, каждый элемент массива выводится с новой строчки.  Например, для  массива из шести элементов: 4 115 7 195 25 106 программа должна вывести числа 4 2 7 2 25 106
Организуем ввод массива заданной длины с клавиатуры
a = []
n=30
for i in range(0, n):
    a.append(int(input()))

Введем переменную k  в которую будем записывать  количество элементов массива  делящихся на 5 и которые больше 100. Изначально k=0
В цикле for переберем все элементы массива. С помощью оператора условия If определим делится ли данный элемента на 5(чтобы элемент делился на 5, необходимо выполнение условия a[i]%5==0 )и больше ли данный элемент 100 (a[i]>100) Чтобы выполнялись оба условия одновременно , необходимо использовать в условном операторе if логическую операцию and. Если оба условия выполняются, то увеличиваем количество счетчик элементов на 1 (k=k+1)
k=0
for i in range(0, n):
    if (a[i]%5==0 and a[i]>100):
       k=k+1

Чтобы заменить все элементы массива кратные 5 на определенное количество k ,в новом цикле for перебираем все элементы массива и с помощью оператора If проверяем,  чтобы данный элемент массива делился на 5 и был больше 100. Если оба условия выполняются, то  заменяем данный элемент массива на k.
for i in range(0, n):
    if (a[i]%5==0 and a[i]>100):
       a[i]=k
    print(a[i])

Полная программа на python для задачи 25 из демо версии егэ по информатике за 2018 год
a = []
n=30
for i in range(0, n):
    a.append(int(input()))
k=0
for i in range(0, n):
    if (a[i]%5==0 and a[i]>100):
       k=k+1
for i in range(0, n):
    if (a[i]%5==0 and a[i]>100):
       a[i]=k
    print(a[i])

Решение на Python задачи 25 на программирование  из демоверсии егэ по информатике за 2017 год
Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых десятичная запись хотя бы одного числа оканчивается на 2. В данной задаче под парой подразумевается два подряд идущих элемента массива. Например, для массива из пяти элементов: 16 3 142 55 22 – ответ: 3.
Организуем стандартный ввод массива заданной длины с клавиатуры в python
a = []
n=40
for i in range(0, n):
    a.append(int(input()))

Введем переменную k — счетчик  нужных нам пар элементов массива
В цикле for в диапазоне от 1 до n-1 будем перебирать пары элементов массива . Пара соседних элементов это a[i] и a[i+1] 
Чтобы получить последнюю цифру в десятичной записи числа нужно найти остаток от деления на 10 данного числа. В python для определения остатка числа используется операция %
последняя цифра числа=число % 10
Нам необходимо проверить для каждой пары элементов массива оканчивается ли хотя бы одно число из пары на 2. Чтобы проверить выполнение хотя бы одного условия в операторе if, используется логическая операция or (ИЛИ). Если хотя бы одно условие выполняется, то увеличиваем счетчик пар на 1
k=0
for i in range(1, n-1):
    if (a[i]%10==2 or a[i+1]%10==2):
       k=k+1

Полная программа на python для задачи 25 из демо версии егэ по информатике за 2017 год
a = []
n=40
for i in range(0, n):
    a.append(int(input()))
k=0
for i in range(1, n-1):
    if (a[i]%10==2 or a[i+1]%10==2):
       k=k+1
print(k)

Вернуться к содержанию круса по Python

Полезно почитать по теме решение задач егэ по информатике на массивы 

Задачи егэ по информатике на пары элементов массива
Задачи егэ по информатике на массивы с накопителем
Задачи егэ по информатике на поиск максимального элемента 
Задачи егэ по информатике на поиск минимального элемента

Поделиться:

Нет комментариев. Ваш будет первым!

Продолжаем наш видеокурс по подготовке к ЕГЭ по информатике 2023!

Сегодня разберём задачи из 19, 20 и 21 задания ЕГЭ по информатике. Для этих задач существует спасительный шаблон на Python, который позволяет получить на них правильные ответы и затратить минимум сил и времени.

Приступим к первой серии задач из демоверсии ЕГЭ по информатике 2021 года.

Задание 19 (Демо 2021)

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат
две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один
ход игрок может добавить в одну из куч (по своему выбору) один камень
или увеличить количество камней в куче в два раза. Например, пусть
в одной куче 10 камней, а в другой 5 камней; такую позицию в игре будем
обозначать (10, 5). Тогда за один ход можно получить любую из четырёх
позиций: (11, 5), (20, 5), (10, 6), (10, 10). Для того чтобы делать ходы,
у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда суммарное количество камней в кучах
становится не менее 77. Победителем считается игрок, сделавший
последний ход, т.е. первым получивший такую позицию, при которой
в кучах будет 77 или больше камней.

В начальный момент в первой куче было семь камней, во второй куче –
S камней; 1 ≤ S ≤ 69.

Будем говорить, что игрок имеет выигрышную стратегию, если он может
выиграть при любых ходах противника. Описать стратегию игрока – значит
описать, какой ход он должен сделать в любой ситуации, которая ему может
встретиться при различной игре противника. В описание выигрышной
стратегии не следует включать ходы играющего по этой стратегии игрока,
не являющиеся для него безусловно выигрышными, т.е. не являющиеся
выигрышными независимо от игры противника.

Известно, что Ваня выиграл своим первым ходом после неудачного первого
хода Пети. Укажите минимальное значение S, когда такая ситуация
возможна.

Решение:

Решим задачу с помощью шаблона на языке программирования Python. Если хотите ознакомится с аналитическим решением задач на теорию игр, можете посмотреть мои статьи по 19 Заданию, 20 Заданию, 21 Заданию. Но с помощью шаблонов на экзамене решать быстрее и легче.

Введём параметр p, который будет олицетворять позицию игры (ход).

Начальная позиция Ход Пети Ход Вани Ход Пети Ход Вани Ход Пети
p 1 2 3 4 5 6
def F(x, y, p):
    if x + y >= 77 and p==3: return True
    if x + y < 77 and p==3: return False

    return F(x+1, y, p+1) or F(x*2, y, p+1) or F(x, y+1, p+1) or F(x, y*2, p+1)
  

for s in range(1, 70):
    if F(s, 7, 1):
        print(s)

Заводим функцию F. Она принимает параметры: x — количество камней в одной куче, y — в другой, p-позиция игры.

Дальше описываем победу. Если x+y>=77 и позиция равна 3 (1 Ход Вани), то возвращаем True, что означает победу.

Если, позиция уже равна 3, но сумарное количество камней меньше, чем должно быть для победы, то возвращаем False (проигрыш).

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

Т.к. здесь формулировка: «Известно, что Ваня выиграл своим первым ходом после неудачного первого
хода Пети.», то между функциями ставим союз ИЛИ (or).

В конце перебираем все возможные значения для s через цикл for, ищём те значения, которые подходят по условию задачи. Значение p всегда увеличиваем на 1.

Ответ: 18

Задание 20 (Демо 2021)

Для игры, описанной в предыдущем задании, найдите два таких значения S,
при которых у Пети есть выигрышная стратегия, причём одновременно
выполняются два условия:

− Петя не может выиграть за один ход;

− Петя может выиграть своим вторым ходом независимо от того, как
будет ходить Ваня.

Найденные значения запишите в ответе в порядке возрастания.

Решение:

Легко переделать из прошлой задачи.

def F(x, y, p):
    if x + y >= 77 and p==4: return True
    if x + y < 77 and p==4: return False
    if x + y >= 77: return False

    if p%2==0:
        return F(x+1, y, p+1) and F(x*2, y, p+1) and F(x, y+1, p+1) and F(x, y*2, p+1)
    else:
        return F(x+1, y, p+1) or F(x*2, y, p+1) or F(x, y+1, p+1) or F(x, y*2, p+1)
  

for s in range(1, 70):
    if F(s, 7, 1):
        print(s)

Теперь должен выигрывать Петя на своём втором ходе. Поэтому в условиях ставим позицию p=4.

Добавляется третье условие. Если кто-то выиграл, но на первых двух условиях мы не вышли из функции, то, значит, выиграл не тот, кто нам нужен, следовательно, возвращаем Fasle.

Здесь вопрос отличается от 19 задания. Здесь Петя должен побеждать при любом ходе соперника, а не при одном неудачном ходе Вани, поэтому добавляется ещё условие.

Для чётных p (это ходы Пети), возвращаем разные ходы через and, т.к. он должен побеждать в любом случае.

Для нечётных p (это ходы Вани), возвращаем ходы через or.

Ответ:

Задание 21 (Демо 2021)

Для игры, описанной в задании 19, найдите минимальное значение S, при
котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть
первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно
выиграть первым ходом.

Решение:

Опять используем прошлый шаблон, но немного модернизируем.

def F(x, y, p):
    if x + y >= 77 and (p==3 or p==5): return True
    if x + y < 77 and p==5: return False
    if x + y >= 77: return False

    if p%2==1:
        return F(x+1, y, p+1) and F(x*2, y, p+1) and F(x, y+1, p+1) and  F(x, y*2, p+1)
    else:
         return F(x+1, y, p+1) or F(x*2, y, p+1) or F(x, y+1, p+1) or  F(x, y*2, p+1)


def F1(x, y, p):
    if x + y >= 77 and p==3: return True
    if x + y < 77 and p==3: return False
    if x + y >= 77: return False

    if p%2==1:
        return F1(x+1, y, p+1) and F1(x*2, y, p+1) and F1(x, y+1, p+1) and  F1(x, y*2, p+1)
    else:
         return F1(x+1, y, p+1) or F1(x*2, y, p+1) or F1(x, y+1, p+1) or  F1(x, y*2, p+1)

for s in range(1, 70):
    if F(s, 7, 1):
        print(s)

print()

for s in range(1, 70):
    if F1(s, 7, 1):
        print(s)

Здесь Ваня должен выигрывать либо на первом своём ходе (p=3), либо на втором своём ходе (p=5).

Т.к. Ваня не должен гарантированно выиграть своим первым ходом, то мы создаём ещё одну функцию F1, похожую на основную функцию F, которая вычисляет, когда Ваня именно гарантированно выигрывает на своём первом ходе (p=3). И, затем, мы из тех чисел, которые получились в первой функции F, исключаем числа, которые получились во второй функции F1.

В первой функции получилось 30,33, а во второй результатов нет. Получается ответ 30.

Ответ: 30

Следущая вариация задач отличается от первой лишь задачей в 19-ом задании. Рассмотрим демоверсию ЕГЭ по информатике 2022. Так же в этой серии задач будет одна куча, но из-за этого шаблон практически никак не меняется.

Задание 19 (Демо 2022)

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит
куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход
игрок может добавить в кучу один камень или увеличить количество камней
в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть
неограниченное количество камней.

Игра завершается в тот момент, когда количество камней в куче становится
не менее 29. Победителем считается игрок, сделавший последний ход,
т.е. первым получивший кучу, в которой будет 29 или больше камней.

В начальный момент в куче было S камней, 1 ≤ S ≤ 28.

Будем говорить, что игрок имеет выигрышную стратегию, если он может
выиграть при любых ходах противника. Описать стратегию игрока – значит
описать, какой ход он должен сделать в любой ситуации, которая ему может
встретиться при различной игре противника. В описание выигрышной
стратегии не следует включать ходы играющего по этой стратегии игрока,
не являющиеся для него безусловно выигрышными, т.е. не являющиеся
выигрышными независимо от игры противника.

Укажите такое значение S, при котором Петя не может выиграть за один ход,
но при любом ходе Пети Ваня может выиграть своим первым ходом.

Решение:

Здесь вопрос отличается от прошлой 19-ой задачи. Здесь Петя должен выиграть в любом случае. Мы эту задачу можем воспринимать, как 20-ую из демоверсии 2021. Ведь там тоже игроку нужно обязательно было побеждать. Осталось написать шаблон с соответствующими параметрами.

def F(x, p):
    if x>=29 and p==3: return True
    if x<29 and p==3: return False
    if x>=29: return False

    if p%2==1:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)

for s in range(1, 29):
    if F(s, 1):
        print(s)

Заводим функцию F. Т.к. у нас одна куча, то она принимает параметры: x — количество камней в куче, p-позиция игры.

Дальше описываем победу. Если x>=29 и позиция равна 3 (1 Ход Вани), то возвращаем True, что означает победу.

Если, позиция уже равна 3, но камней меньше, чем должно быть для победы, то возвращаем False (проигрыш).

Третье условие. Если кто-то выиграл, но на первых двух условиях мы не вышли из функции, то, значит, выиграл не тот, кто нам нужен, следовательно, возвращаем Fasle.

Если мы не вышли на первых трёх условиях, то, значит, продолжаем прокручивать ходы, рекурсивно запускаем функцию F.

Для нечётных p (это ходы Вани), возвращаем разные ходы через and, т.к. он должен побеждать в любом случае. При этом увеличиваем на 1 значение p.

Для чётных p (это ходы Пети), возвращаем ходы через or.

В конце перебираем все возможные значения для s через цикл for, ищём те значения, которые подходят по условию задачи.

Ответ: 14

Задание 20 (Демо 2022)

Для игры, описанной в задании 19, найдите два таких значения S, при
которых у Пети есть выигрышная стратегия, причём одновременно
выполняются два условия:

− Петя не может выиграть за один ход;

− Петя может выиграть своим вторым ходом независимо от того, как
будет ходить Ваня.

Найденные значения запишите в ответе в порядке возрастания.

Решение:

Задача точно такая же, как и в 19 задании, только теперь обязательно должен побежать Петя на своём втором ходу (p=4), при любой игре Вани.

Пишем тот же шаблон, немного отредактировав его.

def F(x, p):
    if x>=29 and p==4: return True
    if x<29 and p==4: return False
    if x>=29: return False

    if p%2==0:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)

for s in range(1, 29):
    if F(s, 1):
        print(s)

Получается 7 и 13.

Ответ:

Задание 21 (Демо 2022)

Для игры, описанной в задании 19, найдите значение S, при котором
одновременно выполняются два условия:

− у Вани есть выигрышная стратегия, позволяющая ему выиграть
первым или вторым ходом при любой игре Пети;

− у Вани нет стратегии, которая позволит ему гарантированно выиграть
первым ходом.

Если найдено несколько значений S, в ответе запишите минимальное из них.

Решение:

Опять используем прошлый шаблон, но немного модернизируем.

def F(x, p):
    if x>=29 and (p==3 or p==5): return True
    if x<29 and p==5: return False
    if x>=29: return False

    if p%2==1:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)


def F1(x, p):
    if x>=29 and p==3: return True
    if x<29 and p==3: return False
    if x>=29: return False

    if p%2==1:
        return F1(x+1, p+1) and F1(x*2, p+1)
    else:
         return F1(x+1, p+1) or F1(x*2, p+1)

for s in range(1, 29):
    if F(s, 1):
        print(s)

print()

for s in range(1, 29):
    if F1(s, 1):
        print(s)

Здесь Ваня должен выигрывать либо на первом своём ходе (p=3), либо на втором своём ходе (p=5).

Т.к. Ваня не должен гарантированно выиграть своим первым ходом, то мы создаём ещё одну функцию F1, похожую на основную функцию F, которая вычисляет, когда Ваня именно гарантированно выигрывает на своём первом ходе (p=3). И, затем, мы из тех чисел, которые получились в первой функции F, исключаем числа, которые получились во второй функции F1.

В первой функции получилось 12,14, а во второй 14. Получается ответ 12.

Ответ: 12

На сегодня всё. Мы рассмотрели самые распространённые вариации задач из 19-21 задания и подобрали к ним «противоядие». До новых встреч!

В первой 21 задаче в функции F1 только камни x сраниваются с 77. Там надо x + y как в основной функции?

Да, Вы правы, нужно x+y писать. Исправил, спасибо!

Почему начальная позиция p=1? Нельзя ли её сделать р=0?
Дабы избежать у учеников путаницы в голове по нумерации ходов. Или в этом скрывается ошибка?
Извините хотел оперативный ответ от Мастера, т.к. нет времени на эксперименты.

На мой взгляд, можно, поменяв соответствующие параметры тоже. Но не будет ли путаницы, если ваши ученики будут находить решения в интернете, где начинается p c 1.

В первом 19ом задании в функции def мне кажется, что не хватает строки if x + y >= 77: return False
Спасибо за Ваш труд!

Нет, там всё в порядке. В формулировке, когда «после неудачного первого хода Пети», можно писать два условия.

я не понимаю почему вы в первых задачах пишите в конце программы строку » if F1(s, 7, 1):»

Проверяем подходит ли значение s под условие задачи. Семёрка — это количество каменей в первой куче.

Спасибо, за последовательность объяснения. все очень понятно.

почему то в 20 задании находит только одно значение, уже несколько вариантов КИМа так, код написан правильно. В чём причина может быть?

Пришлите ссылку на задание.

Задание 21 из КИМа ЕГЭ 2023 по информатике 17 вариант(к примеру). Можно положить 1 камень или умножить количество на 2, Если больше или равно 144 в сумме двух куч, то победа.В первой куче 3 камня, во второй 1

от 1 до 140(включительно). Условия те же. Также неверные ответы получаются в 19 и 20 заданиях. Код правильный

КИМ это оффициальный сборник вариантов в виде книжки. Могу условия на почту скинуть(хотя вроде расписал всё), тут ограничение символов

Понятно, тогда посмотрю и напишу здесь, что думаю.

Решил 17 вариант (задания 19-21) из сборника 2023 года Крылова, Чуркиной по схеме из этой статьи. Ответы сошлись. Могу вам прислать решения, если вы напишите в группе в вк.

Понравилась статья? Поделить с друзьями:

Новое и интересное на сайте:

  • Решение первого задания егэ по математике профильный уровень 2022
  • Решение первого задания егэ по информатике 2022
  • Решение первого варианта егэ по математике
  • Решение педсовета по подготовке к егэ
  • Решение параметров егэ онлайн

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: