2011-12-11 20 views
6

Lo que estoy tratando de hacer es imprimir todas las posibilidades de un número binario n dígitos de largo. En otras palabras, con un número de 4 dígitos:Imprimir la lista de permutaciones binarias

0001 
0010 
0100 
1000 

.etc

para ser honesta, no tengo ni idea de dónde incluso comenzar con esto (aparte de Calculo que había necesidad de usar un bucle, y probablemente una matriz) por lo que cualquier indicador en la dirección correcta sería apreciado.

+8

Si esta es la tarea, por favor añadir la etiqueta tarea. – Kal

+2

Debo aclarar, todos los números posibles dentro de un rango dado. ES DECIR. todas las posibilidades de un binario de 4 dígitos. Reemplace 4 con cualquier número. No es tarea, pero estoy tratando de enseñarme a mí mismo java. – Smitty

+1

En general, las personas que tienen la motivación para aprender un idioma no usan declaraciones como * "No tengo idea de por dónde empezar" *. Obtenga un libro, lea, intente tareas más simples ... –

Respuesta

13

Tal vez usted podría utilizar un algoritmo recursivo:

public void printBin(String soFar, int iterations) { 
    if(iterations == 0) { 
     System.out.println(soFar); 
    } 
    else { 
     printBin(soFar + "0", iterations - 1); 
     printBin(soFar + "1", iterations - 1); 
    } 
} 

tienes que ejecutar este como esto:

printBin("", 4); 

Eso le daría todos los números binarios posibles con 4 dígitos.

Espero que esto sirvió!

+0

¡Realmente no estarías generando números, pero aún produciría la salida deseada! – eboix

+0

Gracias por la respuesta, esto es exactamente lo que estoy buscando. Gracias. – Smitty

5

Para un número binario de n, hay 2^n "permutaciones". Solo necesita pasar los números enteros de 0 a (1<<n)-1, y convertir cada uno a binario.

+0

te refieres a un bucle de 0 - (2^n) -1? – ChrisWue

+0

@Chris: ¡Sí! –

1

Ayuda saber cuántas posibilidades hay.

2^4 = 16, ¿verdad?

Ayudará a saber this también.

Así es como yo lo haría:

/** 
* BinaryDemo 
* @author Michael 
* @since 12/10/11 
*/ 
public class BinaryDemo { 

    public static void main(String[] args) { 
     if (args.length > 0) { 
      int n = Integer.parseInt(args[0]); 
      int m = 1; 
      for (int i = 1; i <= n; ++i) { 
       m *= 2; 
      } 
      System.out.println("# bits : " + n); 
      System.out.println("# values: " + m); 
      String format = "%" + n + "s"; 
      for (int i = 0; i < m; ++i) { 
       System.out.println(String.format(format, Integer.toString(i, 2))); 
      } 

     } else { 
      System.out.println("Usage: BinaryDemo <n>"); 
     } 
    } 
} 
+0

Gracias por su ayuda, esto es muy útil y voy a investigar esto también :) – Smitty

4
for(int i=0; i < 128; i++){ 
    System.out.println(Integer.toBinaryString(i)); 
} 

Ajustar al máximo para tan alto como desee ir.

Si necesita los acolchados 0 de, había otra pregunta sobre la que sólo hoy: Pad a binary String equal to zero ("0") with leading zeros in Java

+0

Esto no dará el resultado deseado. –

+0

Dado que es probable que sea un ejercicio de tarea, este es un detalle menor que puede remediar el OP. :-) – ziesemer

0

Para buscar todas las posibles permutaciones de una cadena binaria dada (patrón), por ejemplo

Las permutaciones de 1000 son 1000, 0100, 0010, 0001

void permutation(int no_ones, int no_zeroes, string accum){ 
    if(no_ones == 0){ 
     for(int i=0;i<no_zeroes;i++){ 
      accum += "0"; 
     } 

     cout << accum << endl; 
     return; 
    } 
    else if(no_zeroes == 0){ 
     for(int j=0;j<no_ones;j++){ 
      accum += "1"; 
     } 

     cout << accum << endl; 
     return; 
    } 

    permutation (no_ones - 1, no_zeroes, accum + "1"); 
    permutation (no_ones , no_zeroes - 1, accum + "0"); 
} 

int main(){ 
    string append = ""; 

    //finding permutation of 11000 
    permutation(2, 6, append); //the permutations are 

    //11000 
    //10100 
    //10010 
    //10001 
    //01100 
    //01010 

    cin.get(); 
} 
0

Mis soluciones utiliza el algoritmo de retroceso. Simplemente imprima todas las combinaciones usando '0' y luego '1'. No es mejor que la respuesta aceptada, pero sólo una manera más para resolver los problem.As un ejemplo que acabamos de llamar a la función, como a continuación de la principal()

ArrayList<Integer> chosen = new ArrayList<>(); 
printAllBinaryDigits(4, chosen); 

private static void printAllBinaryDigits(int digits, ArrayList<Integer>chosen) { 
      if (digits == 0) { 
       System.out.println(chosen); 
      } else { 
       chosen.add(0); 
       printAllBinaryDigits(digits-1, chosen); 
       chosen.remove(chosen.size()-1); 
       chosen.add(1); 
       printAllBinaryDigits(digits-1, chosen); 
       chosen.remove(chosen.size()-1); 
      } 

     } 
Cuestiones relacionadas