Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/54: Рейтинг темы: голосов - 54, средняя оценка - 4.85
2 / 2 / 0
Регистрация: 29.10.2020
Сообщений: 30

Циферки

15.10.2021, 17:51. Показов 11577. Ответов 12

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

Формат входных данных
На вход через пробел подаются два натуральных числа aa и bb. При этом 1≤a≤b≤10^18
Обратите внимание, что для хранения таких чисел в программе на С++ вам потребуется тип long long. В программе на PascalABC такой тип называется Int64.

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

Методика проверки и пояснение к тесту
Программа проверяется на 20 тестах. Прохождение каждого теста оценивается в 1 балл. При этом в первых пяти тестах 1≤a≤b≤1000. Тесты из условия задачи при проверке не используется.

Sample Input 1:
150 200

Sample Output 1:
191

Sample Input 2:
1 255

Sample Output 2:
255

Sample Input 3:
127 200

Sample Output 3:
127
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.10.2021, 17:51
Ответы с готовыми решениями:

Игра циферки
Игра «Чиселки» или «Семечки», она же - «19». Цель игры - вычеркнуть все цифры. Вычёркивать можно любые одинаковые цифры или дающие в...

Складываем циферки
У меня в Edit может быть от 1 до 3 цифр, и мне надо сложить цифры с друг другом ПРример 123 надо сделать 1+2+3 ну и собственно...

Шарики, циферки
Итак... Задумал я игру. В игре будет много шариков. На каждом должна быть нарисована цифра от 0 до 100. У каждого свой звук: мп3 файлы...

12
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
15.10.2021, 18:06
Цитата Сообщение от Petya_Rematov Посмотреть сообщение
в программе на С++ вам потребуется тип long long. В программе на PascalABC такой тип называется Int64
а в Python это как?
0
2 / 2 / 0
Регистрация: 29.10.2020
Сообщений: 30
15.10.2021, 18:56  [ТС]
В условии не сказано, значит можно любыми способами
0
312 / 192 / 98
Регистрация: 01.05.2014
Сообщений: 522
15.10.2021, 19:20
Python
1
2
3
4
5
6
7
8
9
10
m = 0
n = 0
c = 0
s, f = map(int, input().split())
for i in range(s, f + 1):
    m = str(bin(i)[2:]).count('1')
    if m > n:
        n = m
        c = i
print(c)
1
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
15.10.2021, 19:40
Лучший ответ Сообщение было отмечено Petya_Rematov как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
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)
2
5 / 5 / 0
Регистрация: 20.10.2020
Сообщений: 53
16.10.2021, 20:43
@Gdez если Вам не составит труда, можете оптимизировать прогу, а то время выполнение большое(
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
16.10.2021, 21:55
ArtyomOvsyannik, странно... А так?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
a, b = map(int, input().split())
 
kb = pow(2, len(bin(b)) - 2)
ka = pow(2, len(bin(kb-a)) - 3)
res = kb - ka - 1
 
while res > b or a > res:
    ka //= 2
    if a > res:
        res += ka
    else:
        res -= ka
print(res)
1
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 1
17.10.2021, 01:01
@Gdez Не могли бы Вы, пожалуйста, объяснить код?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
17.10.2021, 06:47
ArtyomOvsyannik, нашел -> при a=b=1 "вылетает"
Нужно
Python
1
res = kb - ka - (b!=1)
Добавлено через 35 минут
zofann, максимальное количество 1 в двоичном числе из диапазона от 1 до 2^n -> в числе 2^n - 1 (в коде - это res).
Допустим b = 60 -> 111100; a = 50 -> 110010
Ближайшая степень двойки, большая b -> 64 (n == 6)
res = 64 - 1 = 63 (111111 - 6 единиц)
Так как res > b, то минимальное двоичное число, меньшее 63 с пятью единицами -> 31 - это 63 - 2^(n-1) = 63 - 32 == (111111 - 100000) -> "убираем" старший бит в res. "n" становится == 5
Если res < a -> 31 < 50, то следующее число с пятью единицами 101111 -> получается из "выражения" 11111 + 10000 ("смещаем" старший бит влево на одну позицию, "вставляя" 0 между первой и второй 1) ->31 + 2^(n-1) = 31 + 16 = 47 -> 101111.
Если res < a -> 47 < 50, "смещаем" следующий бит 101111 влево -> 110111 -> 101111 + 1000 -> 47 + 8 -> 47 + 2^(n-1); n == 5-1=4; res = 47+8 = 55
Всё -> a <= res <= b.
0
5 / 5 / 0
Регистрация: 20.10.2020
Сообщений: 53
17.10.2021, 07:59
@Gdez Я не особо понял, где косяк, но стало вообще неправильно на некоторых тестах

Например на 1 255
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
17.10.2021, 08:12
ArtyomOvsyannik, да. С ka и kb неверно... Не проверил
Python
1
2
3
4
5
6
7
8
9
10
11
12
a, b = map(int, input().split())
 
k = pow(2, len(bin(b)) - 2)
res = k - (b != 1)
 
while res > b or a > res:
    k //= 2
    if a > res:
        res += k
    else:
        res -= k
print(res)
Добавлено через 3 минуты
"@Gdez" - набирать не нужно
"Нажимаешь" на имя слева в заголовке комментария (например, Gdez); автоматом "проставляется ссылка" на "автора" в ответе и пишешь ему свой комментарий. "Автору" "прилетает" сообщение - есть комментарий к его "комментарию"
2
5 / 5 / 0
Регистрация: 20.10.2020
Сообщений: 53
17.10.2021, 09:59
Gdez, понял, благодарю!

Добавлено через 1 час 16 минут
Gdez, хорошего Вам дня!
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
17.10.2021, 10:33
Python
1
2
3
4
a, b = map(int, input().split())
while a | (a+1) <= b:
    a |= a+1
print(a)

Не по теме:

уже 2-3й день наблюдаю за этими Г-кодерами. устал


1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2021, 10:33
Помогаю со студенческими работами здесь

О чем говорят эти "циферки"?
Приветствую всех! Вероятно, удел всех новичков начинать со слов &quot;Извините, я чайничек...&quot; Надеюсь на вашу благосклонность и в...

Вопрос про циферки, как вывести
Привет всем! Как работать с семисегментником понятно и как выводить многозначные числа на индикатор если они разбиты на отдельные цифры...

Как они так красиво циферки вывели?
Как они так красиво циферки вывели в блоке ЭТАПЫ ВЫПОЛНЕНИЯ ДЕМОНТАЖА смотрю исходники, не могу разобраться тут

СМА BOSCH WAS 24741OE16 FD8807200438, нужны циферки по кодировке модуля
То ли ребёнок кнопалки понажимал, то ли напряжение попрыгало. Выдавала ошибку 34. Выставил импульсный замок, русский язык, но нет доп...

Включаешь комп - пробегают циферки, потом винда и чёрный экран. Пишет неоптимальное разрешение экрана
проблема с разрешением экрана,включаеш комп пробегают циферки потом винда и чёрный экран,пишет не оптимальное разрешение экрана,поставил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru