Higher
|
||||||
1 | ||||||
Найти следующее после n число, в двоичной записи которого столько же единиц22.08.2011, 13:25. Показов 5493. Ответов 43
Метки нет (Все метки)
Доброго времени суток.
Вопрос в названии темы, полное условие тут. Перебор не проходит. Пробовал так
Что-то не могу дойти... Если число - степень двойки, то ответом будет следующая за ним степень двойки. Больше никаких закономерностей не выявил... Желательно решить с использованием только побитовых операций, т.е. без массивов, битсетов, логарифмов и прочей нечисти.
0
|
22.08.2011, 13:25 | |
Ответы с готовыми решениями:
43
Найти следующее число, в двоичной записи которого столько же единиц, сколько и в двоичном представлении числа N Найти число в двоичной записи которого максимальное число единиц Найти следующее за заданным число, в двоичном разложении которого столько же единиц, сколько в двоичном разложении числа Среди простых чисел найти найти такое, в двоичной записи которого максимальное число единиц. |
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
22.08.2011, 13:37 | 2 |
Diagon, думаю задача простая. Ищем самую правую цепочку 01 и ее заменяем на 10. Вот как.
Например, из 1010 получаем 1100, из 1011 - 1101
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
22.08.2011, 13:39 | 3 |
Мне кажется, надо выделить самую правую единичку и перенести её на место ближайшего к ней ноля слева. Что-то вроде этого:
10110110 + 00000010 -------- 10111100 or 10110110 -------- 10111110 xor 00000010 -------- 10111100 Но я мог ещё не проснуться Добавлено через 1 минуту Эх, опоздал чуток.
1
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
22.08.2011, 13:40 | 4 |
В посте 2 алгоритм
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
22.08.2011, 13:44 | 6 |
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
22.08.2011, 13:46 | 7 |
Так. Получается, что я ещё не проснулся Неправильно у меня.
0
|
222 / 135 / 19
Регистрация: 06.11.2010
Сообщений: 234
|
|
22.08.2011, 13:47 | 8 |
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
22.08.2011, 13:48 | 9 |
А это просто, выделяем по 2 бита и проверяем на равенство:
if (x & 3 == 1), затем сдвигаем на 1 бит вправо
0
|
Higher
|
|
22.08.2011, 13:50 [ТС] | 10 |
Это же 188 получается, а 185 поближе будет. Хм.
Что бы найти в битовом представлении 10, придется сначала перегнать числу в строку, затем обратно... Длинновато получиться. Но вариант интересный, спасибо.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
22.08.2011, 13:51 | 11 |
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
22.08.2011, 13:53 | 12 |
0
|
Higher
|
|
22.08.2011, 13:56 [ТС] | 13 |
Что-то я туплю... Сдвигаем направо что? x или 3?
Про ваш, опечатался, 01 имел в виду. Теперь вопрос, как ее там найти, я что-то не очень понял... Вернее не как найти, а как изменить на 10.
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
||||||
22.08.2011, 14:13 | 14 | |||||
Сдвигаем x, а число 3 здесь фигурирует как 0...011. Если хотите, алгоритм вам напишу
Добавлено через 3 минуты Вот, функция возвращает требуемое число:
1
|
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
22.08.2011, 14:15 | 15 |
Здесь еще нужно предусмотреть варианты типа
1000000 1111111
1
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
22.08.2011, 14:17 | 17 |
0
|
Higher
|
|
22.08.2011, 14:19 [ТС] | 18 |
n *= 2;
Такое получиться, если следующее за ним число будет степенью двойки... Правда что при этом делать затрудняюсь ответить... Хотя оно же само преобразуется в правильный вариант.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
22.08.2011, 14:22 | 19 |
0
|
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
|
|
22.08.2011, 14:24 | 20 |
Diagon, 2^30 это 010...0 переходит в 10...0, как раз 32 бита
Добавлено через 38 секунд 101110000
0
|
22.08.2011, 14:24 | |
22.08.2011, 14:24 | |
Помогаю со студенческими работами здесь
20
Среди простых чисел найти такое, в двоичной записи которого максимальное число единиц Среди простых чисел, не превосходящих N, найти такое, в двоичной записи которого максимальное число единиц Вывести десятичное простое число, в двоичной записи которого наибольшее число единиц Определить элемент массива, в двоичной записи которого максимальное число единиц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |