Найти в Дзене

Задача со звездочкой А. Богданова (тип ЕГЭ №14 на СС) про "Сириус" и Лицей № 8052* (ну и бонус № 8085)

Задача крепкая, хоть и несложная - помечена звездочкой за то, что не решается сходу, нужно подумать. Вот формулировка задачи, смотрите: Как решаем? Мой любимый метод решения - через списки, с помощью самописной функции, которая переводит любое недесятичное число в десятичное. Единственное замечание - основания систем счисления p и q надо вручную посчитать, какими они минимальными могут быть, в зависимости от максимальной цифры, и перебирать начиная с них) Можно, конечно, в Электронных таблицах перебрать буквы или даже на бумаге, но мне нравится вот такой вариант, через код символа for b in range(ord('A'),ord('Z')+1): print(chr(b),b-55, sep = '=', end = ', ') Выходит что-то навроде этого - связь буквы и числа нам пригодится для однозначного определения цифры числа. Анализируем содержимое выражения. Видим, что "иксов" нет, нам даны цифры в неизвестной системе счисления с основанием p у "слова" SIRIUS и q у LYCEUM. нас просят найти минимально возможное, поэтому мы не можем перебор на

Задача крепкая, хоть и несложная - помечена звездочкой за то, что не решается сходу, нужно подумать.

Вот формулировка задачи, смотрите:

-2

Как решаем? Мой любимый метод решения - через списки, с помощью самописной функции, которая переводит любое недесятичное число в десятичное.

Единственное замечание - основания систем счисления p и q надо вручную посчитать, какими они минимальными могут быть, в зависимости от максимальной цифры, и перебирать начиная с них)

Можно, конечно, в Электронных таблицах перебрать буквы или даже на бумаге, но мне нравится вот такой вариант, через код символа

for b in range(ord('A'),ord('Z')+1):
print(chr(b),b-55, sep = '=', end = ', ')

Выходит что-то навроде этого - связь буквы и числа нам пригодится для однозначного определения цифры числа.

-3

Анализируем содержимое выражения. Видим, что "иксов" нет, нам даны цифры в неизвестной системе счисления с основанием p у "слова" SIRIUS и q у LYCEUM. нас просят найти минимально возможное, поэтому мы не можем перебор начать с 0 или какой-то цифры - вычисляем максимальную "цифру" - это U=30, значит счисления p как минимум 31-ричная. Так же с сс q - там самая большая цифра - Y и ее эквивалент 34. Значит, в этой системе счисления от 0 до 34 включительно - всего 35 цифр - такая и СС.

Про функцию перевода. Конечно, можно составить арифметическое выражение👇 вот таким образом (в развернутом виде) и перебрать p и q, но я покажу способ с переводом

-4

Функция короткая, интуитивно понятная - в качестве параметров заходим со списком а и с основанием системы счисления x. Первым делом разворачиваем список (элементы списка - это цифры числа), для того, чтобы перевести правильно - вычисляем будто переводим вручную, на бумаге - берется цифра числа и умножается на основание СС x, в степени разряда цифры в числе i. Ну и находится сумма таких произведений - мы на бумажке так же считаем. Разворот списка необходим, ведь i генерируется с 0 до длины числа - мы просто будто бы идем с конца (младший разряд умножаем на x в степени 0)

def f(a,x):
a = a[::-1]
return sum(a[i]*x**i for i in range(len(a)))

Надеюсь, с функцией все понятно. Посмотрим на перебор оснований СС.

Мы выяснили, что они как минимум 31 и 35 соответственно, с них перебор и организуем, например, до 500. И если выражение делится на 2025 без остатка (это по условию), то складываем в список пару - сумму p и q и результат целочисленного деления значения выражения с подставленными p и q на 2025. Выведем минимальный элемент списка

-5

Можно, конечно, весь список посмотреть глазами, пробежаться, убедиться:

-6

Но нам достаточно увидеть это и вписать ответ: 75 - это минимальная сумма, но вписать нужно результат деления на 2025 выражения, то есть 2009655

-7

Чтобы убедиться, что способ рабочий, предлагаю решить еще и более простую задачу с сайта К.Ю. Полякова № 8085. Вот ее формулировка:

-8

Кстати, вот эта формулировка "найдите наименьшее значение x..." - иногда в ответ пишут именно найденный икс, но ведь тут надо частное вывести.

Немного слов перед показом кода: функция перевода недесятичного числа в десятичное с помощью списка остается неизменной ВСЕГДА, во всех задачах такого типа. Перебираем x - так как спросили наименьший, то с нуля (ну а вдруг!), разбиваем выражение на 3 части (ну мне так удобнее - можете сразу все в одно лепить) и проверяем, не кратно ли выражение 20 с текущим иксом. Если да, выводим частное, прерываем выполнение цикла, так как минимум уже нашли.

-9
если есть вопросы к этому прекрасному способу - пишите, интересуйтесь! Больше разборов (видео) - в моей статье ниже