Предмет: Информатика, автор: georgijschtscholokov

Дам 100 баллов(Питон)
Алиса учится работать с двоичными числами. Она уже поняла, что число в двоичной записи получается в несколько раз длиннее, чем в десятичной. А еще она поняла, что нули писать дольше чем единицы. И теперь ее любимые числа — это те, двоичная запись которых содержит как можно больше единиц. Алисе дали задание — выбрать одно произвольное число из заданного закрытого интервала [a;b][a;b] и перевести его в двоичную запись. И теперь Алиса просит, чтобы вы написали программу, которая найдет в этом интервале число, двоичная запись которого содержит наибольшее количество единиц. Если таких чисел будет несколько, то Алиса будет рада любому из них.

Формат входных данных
На вход через пробел подаются два натуральных числа aa и bb. При этом 1\leq a\leq b \leq 10^{18}1≤a≤b≤10
18
.

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

Ответы

Автор ответа: Kovirum
1

numbers = input(" ").split(" ")

number_maximum = "0|0"

number_max = int(numbers[1])

number_min = int(numbers[0])

number_now = number_min

while number_now < number_max+1:

number_now2 = bin(number_now)

if int(number_maximum.split("|")[1]) < len([x for x in number_now2 if str(x) == "1"]):

number_maximum = f"""{number_now}|{len([x for x in number_now2 if str(x) == "1"])}"""

number_now = number_now + 1

number_now2 = []

print(number_maximum.split("|")[0])


georgijschtscholokov: А почему не работает? При запуске выдаёт ошибку.
Kovirum: Не знаю, у меня все работает
faginavalya: Какой язык?
Kovirum: питон
georgijschtscholokov: [ ] Test #1. Runtime error
[ ] Test #2. Runtime error
[ ] Test #3. Runtime error
[ ] Test #4. Runtime error
[ ] Test #5. Runtime error
[ ] Test #6. Runtime error
[ ] Test #7. Runtime error
[ ] Test #8. Runtime error
[ ] Test #9. Runtime error
[ ] Test #10. Runtime error
commandr15: этот код не работает дядь,а 1 первый работает но на 19 из 20
commandr15: у тебя есть мой дс
commandr15: напиши
Автор ответа: ggff456789
5

Ответ:

a, b = map(int, input().split())

k = 1

while b > k:

   k *= 2

res = k-1

while res > b or a > res:

   k //= 2

   if a > res:

       res += k  

   else:

       res -= k

print(res)

Объяснение:


georgijschtscholokov: Можете чуть-чуть оптимизировать программу?
Kovirum: Я за гкод
Kovirum: Ой не туда
Kovirum: как удалить((
commandr15: 19 из 20,что не так?
commandr15: скинь мне в дс правильное решение пж
Похожие вопросы
Предмет: Французский язык, автор: hhhhhhhh7