Форум сайта python.su
0
Вот такое задание: Значение арифметического выражения 7**100 + 7**30 – х, где х – натуральное число,
меньшее, чем 720, записали в системе счисления с основанием 7 Определите наибольшее
количество нулей, которое может содержать семиричная запись значения данного
арифметического выражения.
Вот мой код:
for x in range(10000):
a=7**100+7**30-x
w=
while a>0:
w=+w
a=a//7
print(w.count(0))
Выдает ответ 70, хотя правильно 89, не понимаю в чем ошибка.
Офлайн
2
Во-первых. Чтобы ваш код было легче читать, используйте квотирование! Не вставляйте код в сообщение как простой текст.
LanayaА во-вторых… Почему вы считаете что правильно 89? Я согласен с вашей программой - семеричная запись результата вашего арифметического выражения будет содержать 70 нулей.
Выдает ответ 70, хотя правильно 89, не понимаю в чем ошибка.
Офлайн
857
Alex.Pro.Если мы вычтем 49, то получится 72 нуля там.
Мы получили 70 нулей и это предел для нашего условия. Чтобы получить больше нулей, требуется вычитать число, сравнимое с 7**30.
1 0 0 ... 0 0 1 0 0 ... 0 0 - 100 = 1 0 0 ... 0 0 0 6 6 ... 6 6 0 0
Офлайн
2
py.user.nextУпс. Изначально я неправильно понял условие. Мне показалось что требуется определить наибольшее непрерывное количество последовательных нулей. Если убрать требование непрерывности последовательных нулей, тогда максимальное кол-во нулей получится в результате вычисления 7**100+7**30-7**3. Всего 73 нуля: единица, 70 нулей, 27 шестёрок и ещё 3 нуля. Обнулить больше цифр (в более старших разрядах) мы не можем по условию.
Если мы вычтем 49, то получится 72 нуля
Офлайн
-1
Если цель — максимизировать количество нулей в 7-ичной записи, то у вас в коде вообще не та проблема, которую нужно решать через полный перебор x до 10000.
Во-первых, ограничение x < 720 уже сильно сужает пространство, и brute force тут норм, но проблема не в этом.
Во-вторых, ключевой момент — это структура числа
7^100 + 7^30 в системе счисления base 7.
Это не “случайные единицы”, а разреженные разряды: единица в позиции 100 и 30.
Дальше всё зависит от того, как именно происходит borrow при вычитании x.
Если x < 7^30, то влияние идёт только на младшие разряды, и старшая структура (в районе 7^30 и 7^100) почти не ломается. Поэтому ожидать “резкого увеличения нулей” там нет смысла.
Теперь по поводу 89 vs 70. stickman hook
70 нулей — это результат прямой корректной симуляции перевода в base 7 и учёта borrow.
А вот 89 выглядит как попытка учитывать “оптимизацию через подбор x”, но без строгого контроля того, как именно распространяется заем по разрядам.
Офлайн