Задание 25. Информатика. ЕГЭ. Поляков-6836
- Просмотры: 246
- Изменено: 24 ноября 2024
(А. Богданов) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины, в том числе «*» может задавать и пустую последовательность.
Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300425\).
Среди десятиразрядных чисел, кратных \(2023\) и соответствующих маске «\(1*1\)», найдите числа с максимальной суммой цифр. В ответ запишите найденные числа в порядке убывания, справа от каждого числа запишите частное от деления на \(2023\).
Решение:
Python
def dig_sum(number):
s = 0
while number:
s += number % 10
number //= 10
return s
n = 1999999991 - 1999999991 % 2023 # самое большое десятизначное число 1*, делящееся на 2023
while True: # находим самое большое десятизначное 1*1, делящееся на 2023
if n % 10 == 1:
break
n -= 2023
nums = [] # сюда соберём все десятизначные числа вида 1*1, делящиеся на 2023
for i in range(n, 999999999, -20230): # все такие числа находятся друг от друга на расстоянии 20230
nums.append(i) # их не больше 50 000, не так много :)
nums_dig_sum = [dig_sum(n) for n in nums] # считаем суммы цифр каждого такого числа
max_sums = max(nums_dig_sum) # находим максимальную такую сумму
for i in range(len(nums)): # печатаем только числа с максимальной суммой, найденной ранее
if nums_dig_sum[i] == max_sums:
print(nums[i], nums[i] // 2023)
Ответ:
\(1999769891\) \(988517\)
\(1895989991\) \(937217\)