Форум программистов, компьютерный форум CyberForum.ru

Найти следующее после n число, в двоичной записи которого столько же единиц - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ класс дата http://www.cyberforum.ru/cpp-beginners/thread344218.html
Создать класс типа - дата с полями: день (1-31), месяц (1-12), год(целое число).Класс имеет конструктор:с параметрами, без параметров,копирования; деструктор; функции-члены получения дня,месяца и года,а также две функции-члены печати по шаблону: "5 января 1997 года" и "05.01.1997"; функции-члены должны проверять корректность задаваемых параметров. Помогите пожалуйста с определением класса! Вот...
C++ CodeLite - отсутствуют библиотеки Здравствуйте, дорогие форумчане. Необходима кросcплатформенная среда разработки C++. На рабочем компе через центр приложений (Ubuntu) поставил CodeLite. Столкнулся с проблемой отсутствия инклудов windows.h, conio.h и т.д. Проекты просто не запускаются. На домашнем ПК пользуюсь Visual Studio, поэтому с подобной проблемой никогда не сталкивался. В инете манов по это поводу не нашел. Прошу... http://www.cyberforum.ru/cpp-beginners/thread344179.html
C++ Получить список студентов с указанием среднего балла
имеется информация о студентах группы: Ф.И.О., результаты экзаменационной сессии. Мне надо получить список студентов с указанием среднего балла. Для решения данной задачи мне надо использовать массив структур или можно как-то по другому сделать? Если да, то как?
Код ждёт ввода следующей строчки - цикл повторяется бесконечно. C++
В учебнике написано, что вот этот код #include <iostream> #include <string> using namespace std; int main() { string word; while (cin >> word) cout << "прочитано слово: " << word << "\n";
C++ смена IP-адреса http://www.cyberforum.ru/cpp-beginners/thread344162.html
день добрый. не подскажите как программно заставить венду сменить IP ?
C++ Немного о динамическом выделении памяти ... объявление данных в классе: class Employee {.......... private: char *firstName; char *lasrName; } подробнее

Показать сообщение отдельно
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
22.08.2011, 13:25     Найти следующее после n число, в двоичной записи которого столько же единиц
Доброго времени суток.
Вопрос в названии темы, полное условие тут.
Перебор не проходит.
Пробовал
так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
int ones_count(int n){
    int res = 0;
    for( ; n ; n >>= 1)
        res += n & 1;
    return res;
}
int main(){
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int n;
    std::cin >> n;
    if ( !(n & (n - 1) ) ) //если степень двойки
    {
        std::cout << 1ll * n * 2;
        return 0;
    }
    int n_count = ones_count(n);
    for (;;)
    {
        ++n;
        if (ones_count(n) == n_count)
        {
            std::cout << n;
            return 0;
        }
    }
}

Что-то не могу дойти...
Если число - степень двойки, то ответом будет следующая за ним степень двойки. Больше никаких закономерностей не выявил...
Желательно решить с использованием только побитовых операций, т.е. без массивов, битсетов, логарифмов и прочей нечисти.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru