Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.04.2011, 10:41
Новичок

Отправить личное сообщение для maksatktl Посмотреть профиль Найти все сообщения от maksatktl
 
Регистрация: 30.03.2011
Сообщений: 7

Следующее число
Следующее число
(Время: 1 сек. Память: 16 Мб Сложность: 36%)
Задано натуральное число N.

Требуется написать программу, которая найдет следующее за ним число, в двоичном разложении которого столько же единиц, сколько в двоичном разложении числа N.

Входные данные

Входной файл INPUT.TXT содержит одно натуральное число N (N ≤ 230).

Выходные данные

Выходной файл OUTPUT.TXT должен содержать ответ на задачу.

Примеры

№ INPUT.TXT OUTPUT.TXT
1 1 2
2 2 4
3 3 5
pomogite 4em mojete
ssilka:http://acmp.ru/index.asp?main=task&id_task=318
HELP
  #2  
Старый 02.04.2011, 12:01
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

http://e-maxx.ru/algo/generating_combinations
  #3  
Старый 06.08.2011, 18:53
Новичок

Отправить личное сообщение для хус++ Посмотреть профиль Найти все сообщения от хус++
 
Регистрация: 09.11.2010
Сообщений: 7

переводим N в двоичную систему счисления
Код:
Bin := '';
          while (N > 0)
          do
            begin
              Bin := Chr (N mod 2 + 48) + Bin;
              N := N div 2;
            end;
добавим в двоичное представление ведущие нули
Код:
for i := 1 to (35 - Length (Bin)) do
            Bin := '0' + Bin;
теперь идем с конца двоичного представления и ищем первую единицу, слева от которой стоит ноль, после чего обменяем их местами, а все единицы, что остались справа запишем в конец числа
примерно так
Код:
 for i := Length (Bin) downto 1 do
            if (Bin [i] = '1')
               and
               (Bin [i - 1] = '0')
              then
                begin
                  Bin [i - 1] := '1';
                  Bin [i] := '0';
                  t := i;

                  break;
                end;
потом сортируем оставшуются часть числа по неубыванию
Код:
 for i := t to (Length (Bin) - 1) do
            for j := t to (Length (Bin) - i) do
              if (Bin [j] > Bin [j + 1])
                then
                  begin
                    Bin [j] := '0';
                    Bin [j + 1] := '1';
                  end;
теперь переведем результат в десятичную систему счисления и прибавляем последнюю цифру двоичного разряда
Код:
 for i := 1 to (Length (Bin) - 1) do
            if (Bin [i] <> '0')
              then
                Inc (N, Pow (2, Length (Bin) - i));
Inc (N, Ord (Bin [Length (Bin)]) - 48);
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Про хромотическое число графа sergey2189 Графы 2 15.11.2009 17:06
Число Гамильтоновых циклов гость Графы 14 07.11.2009 11:07
Число комбинаций (help!!!) ALT Математические алгоритмы 5 14.05.2009 17:38
Следующее число гость Задачи 2 06.10.2008 12:08
число пи незарегистрированный Математические алгоритмы 2 21.12.2006 22:24