2015-04-18 3 views
-3

Как напечатать все возможные комбинации конкретного двоичного числа без повторений значений с помощью Java/Cвозможные комбинации конкретного двоичного числа

Например:

Входной сигнал:

110011111 

Выход:

100111111 
111110011 
111001111 
111111100 

и т.д ..

+0

Пожалуйста, выберите любой язык. –

+1

и предоставить код, который вы пробовали и не выполнили. Это не «сделать мой домашний сайт» – mfro

+0

Что? Я не понимаю – tim

ответ

0

Вот первый способ, который пришел на ум. Может быть лучше или эффективнее.

  1. Построить двоичное дерево. Корневой узел не имеет значения. Левый - 0 и правый - 1 (на самом деле не имеет значения, что есть). Глубина дерева: Число бит плюс 1 (для учета корня).
  2. Проделайте полную глубину первого обхода дерева. Подсчитайте количество 1 (или 0) для каждого обхода.
  3. Если число 1 (или 0) соответствует входу, то в набор ответов может быть добавлен обход .
+0

Конечно, это почти метод грубой силы. Вы можете сделать его намного более эффективным, если поместить в него еще несколько соображений. Например, вы можете фактически делать подсчет при построении дерева, чтобы вам не приходилось создавать полное дерево, и на самом деле вы получаете полный набор ответов, когда завершается строительство дерева (все ветви с полной глубиной). Конечно, это (немного) сложнее основного решения, но будет более эффективным. – kaylum

+0

Я попытаюсь посмотреть, работает ли он или нет. –

0

для меня, я буду решать его следующим образом (грубой силы), (не идеальное решение): http://ideone.com/d37KDK

#include <stdio.h> 

void showbits(int n) 
{ 
    int i,k,andmask; 

    for(i=31;i>=0;i--) 
    { 
     andmask = 1 << i; 
     k = n & andmask; 

     k == 0 ? printf("0") : printf("1"); 
    } 
    printf("\n"); 

} 

int numberOfOnes (int num) { 
    int count = 0; 
    unsigned int u = (unsigned int)num; 
    while (u != 0) { 
     if ((u&1) == 1) 
      count++; 
     u >>= 1; 
    } 
    return count; 
} 

int main() 
{ 

    int n = 0b110011111; 
    int n_num_of_ones = numberOfOnes(n); 
    int max = 1 << 30; 
    printf("max=%d\n" , max); 
    int i; 
    for(i = 0; i < max ; i++) 
     if(numberOfOnes(i) == n_num_of_ones) 
      showbits(i); 
    return 0; 
} 
+0

@SridharS: для завершения требуется много времени. Я завершаю его с помощью CTRL + C. – houssam

+0

да, но я только хотел получить выход для конкретной проблемы. Что я должен делать тогда. –

+0

попробуйте с «коротким» типом данных вместо «int». – houssam

Смежные вопросы