2016-04-18 16 views
-1

Ich schreibe einen Java-Code alle Kombinationen von Bit-String mit der Länge N zu schreiben“. Diesen Code druckt alle Kombination, aber ich will alles Kombination haben, mit genau N Länge und‚H‘1.Kombinationen in Java

wie N = 4 & H = 2 => 0011,0101,0110,1100,1010,1001

public void print(int n, char[] k, char[] A) { 
    if (n <= 0) { 
     System.out.print(String.valueOf(A) + " "); 
    } else { 
     for (int i = 0; i < k.length; i++) { 
      A[n - 1] = k[i]; 
      print(n - 1, k, A); 
     } 
    } 
} 

public static void main(String[] args) { 
    String k = "01"; 
    @SuppressWarnings("resource") 
    Scanner in = new Scanner(System.in); 
    int n = in.nextInt(); 
    MiniProject i = new MiniProject(); 
    i.print(n, k.toCharArray(), new char[n]); 

} 

Antwort

-2

Versuchen Sie es.

static void print(int n, char[] k, char[] A, int h, int c) { 
    if (n <= 0) { 
     if (c == h) 
      System.out.print(String.valueOf(A) + " "); 
    } else { 
     for (int i = 0; i < k.length; i++) { 
      A[n - 1] = k[i]; 
      int nc = i > 0 ? c + 1 : c; 
      print(n - 1, k, A, h, nc); 
     } 
    } 
} 

public static void main(String[] args) { 
    String k = "01"; 
    int n = 4; 
    int h = 2; 
    print(n, k.toCharArray(), new char[n], h, 0); 
} 
+0

Kannst du etwas über diesen Code erklären plz !! ??? :) –

0

Es gibt zwei Ansätze:

(1) Bevor Sie Ihre System.out.print, die Anzahl von 1en zählt in A und sehen, ob es mit der von Ihnen gewünschten Anzahl übereinstimmt.

(2) Definieren Sie Ihre rekursive Methode

public void print(int n, char[] k, char[] A, int numberOfOnes) { 

Dann werden:

  • Wenn Sie print rekursiv aufrufen, der letzte Parameter ist davon abhängig, ob Sie nur eine 1 oder eine 0 hinzugefügt zu A. Wenn Sie eine 0 hinzugefügt haben, entspricht numberOfOnes dem Wert, der übergeben wurde. Wenn Sie eine 1 hinzugefügt haben, verwenden Sie numberOfOnes - 1, wenn Sie rekursiv aufrufen. Sagen Sie beispielsweise n=4 und Sie möchten alle 4-Bit-Bitfolgen mit 2 Einsen generieren. Wenn Sie das erste Bit auf 0 setzen, möchten Sie jetzt alle 3-Bit-Strings mit 2 Ein-Bits generieren. Aber wenn Sie das erste Bit auf 1 setzen, möchten Sie alle 3-Bit-Strings mit 1 Bit erzeugen, da Sie bereits eine der 1en verbraucht haben.

  • Basisfälle: Wenn numberOfOnes 0 ist, dann generieren Sie einfach n 0 Bits als einzige Lösung. Wenn numberOfOnes größer als n ist, generiere nichts - es wird unmöglich sein.