2 / 2 / 0
Регистрация: 29.10.2020
Сообщений: 30

Циферки

15.10.2021, 17:51. Показов 11581. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен 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, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru