Разбор варианта «Как реальный» | Информатика ЕГЭ - Артем Имаев

preview_player
Показать описание


😎Мои соцсети

💻Наши платформы для обучения

00:00:00 Начало
00:05:07 Задание 1
00:09:03 Задание 2
00:15:34 Задание 3
00:19:40 Задание 4
00:22:23 Задание 5
00:36:54 Задание 6
00:42:10 Задание 7
00:46:17 Задание 8
00:53:54 Задание 9
01:00:20 Задание 10
01:04:40 Задание 11
01:07:45 Задание 12
01:16:37 Задание 13
01:20:26 Задание 14
01:28:22 Задание 15
01:32:40 Задание 16
01:35:48 Задание 17
01:39:25 Задание 18
01:44:09 Задание 19
01:47:30 Задание 20
01:52:44 Задание 21
02:02:26 Задание 22
02:05:19 Задание 23
02:07:44 Задание 24
02:12:49 Задание 25
02:16:43 Задание 26
02:24:16 Задание 27

#ЕГЭИнформатика #Программирование #ВШЭ #Python #Pascal #ГотовимсякЕГЭ
Рекомендации по теме
Комментарии
Автор

На мой взгляд программное решение задачи с цифровым автоматом из трехзначного числа слишком переусложнено (35:25). Перебор всех чисел, образованных парами цифр, там не нужен.
Вот более простое решение. Идея заключается в том, что если отсортировать цифры, то для нормального случая (без нулей) решение равно десятикратной разности между последним и первым числом-цифрой (среднее самоликвидируется при вычитании). Также есть два частных случая с присутствием нулей (один или два нуля), и у них тоже однозначные решения.
Сначала получаем упорядоченный список из трех чисел - цифр трехзначного числа:
c = sorted([int(x) for x in s]) # [2, 3, 8] из примера
далее,
если наше число не содержало нулей, то ответ будет (c[2]-c[0])*10 -> (8-2)*10 = 60 из примера,
если был один ноль, то ответ = (c[2]-c[1])*10 + c[1], (именно здесь мы учитываем условие, что число не может начинаться с нуля),
а если было два нуля, то минимальное совпадает с максимальным и ответ всегда равен нулю.
Так как список у нас отсортирован, то нули будут в его начале.
Вычисление разности можно записать одной строчкой:
diff = 0 if c[:2] == [0, 0] else (c[2]-c[1])*10 + c[1] if c[0] == 0 else (c[2]-c[0])*10

И, собственно, полное решение:

for i in range(100, 1000):
c = sorted([int(x) for x in str(i)])
if 70 == (0 if c[:2] == [0, 0] else (c[2] - c[1]) * 10 + c[1] if c[0] == 0 else (c[2] - c[0]) * 10):
print(i)
break

P.S. Выражение c[:2] == [0, 0] я употребил для наглядности. В реальном коде так лучше не делать ) В данной задаче будет достаточно c[1] == 0. Список упорядочен, поэтому если второй элемент равен нулю, то и первый - тоже.

bobrakaubamha
Автор

36:25 я через permutations отобрал все комбинации и оставил двузначные числа. С помощью int() отбросил незначащие нули. По-моему такой способ попроще
from itertools import permutations
for N in range(100, 1000):
num = str(N)
mas = []
for x in permutations(num, r=2):
s = ''.join(x)
if int(s) // 10 != 0:
mas.append(int(s))
R = max(mas) - min(mas)
if R == 70:
print(N, max(mas), min(mas), R)

malyinik
Автор

5 задание. Не знаю, может кому-то пригодится
for n in range(100, 1000):
a = []
for num in str(n):
a.append(num)
a = sorted(a)
aMin = aMax = 0
if a[0]!='0':
aMin = int(a[0]+a[1])
else:
aMin = int(a[1] + a[0])
if a[2]!='0':
aMax = int(a[2]+a[1])
else:
aMax = int(a[1] + a[2])
dif = aMax - aMin
if dif == 70:
print(n)
break

АртурАнтисептик
Автор

Кстати на том сайте не совсем те ответы, как у тебя

Ivan_
Автор

у вас 24 номере ошибка в файлах, файл составлен из символов G E D, однако в файлах были буквы R и F

jklazer