2011-12-11 57 views
6

Điều tôi đang cố làm là in tất cả các khả năng của một số nhị phân n chữ số. Nói cách khác, với một số 4 chữ số:Danh sách in các hoán vị nhị phân

0001 
0010 
0100 
1000 

..etc

Thành thật mà nói, tôi không có ý tưởng về nơi để thậm chí bắt đầu với điều này (trừ tôi con tôi sẽ cần phải sử dụng một vòng lặp, và có lẽ là một mảng) để bất kỳ con trỏ nào đi đúng hướng sẽ được đánh giá cao.

+8

Nếu đây là bài tập về nhà, xin vui lòng thêm thẻ bài tập về nhà. – Kal

+2

Tôi nên làm rõ, tất cả các số có thể trong một phạm vi nhất định. I E. tất cả khả năng của một nhị phân 4 chữ số. Thay thế 4 bằng bất kỳ số nào. Nó không phải là bài tập về nhà nhưng tôi đang cố gắng tự học java. – Smitty

+1

Nói chung những người có động lực để dạy cho bản thân một ngôn ngữ không sử dụng các câu như * "Tôi không biết phải bắt đầu từ đâu" *. Hãy đọc sách, đọc, thử các tác vụ đơn giản hơn .. –

Trả lời

13

Có lẽ bạn có thể sử dụng một thuật toán đệ quy:

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); 
    } 
} 

Bạn sẽ thực hiện điều này như thế này:

printBin("", 4); 

Điều đó sẽ cung cấp cho bạn tất cả các số nhị phân có thể có 4 chữ số.

Hy vọng điều này sẽ hữu ích!

+0

Bạn sẽ không thực sự tạo ra số, nhưng nó vẫn sẽ tạo ra kết quả mong muốn! – eboix

+0

Cảm ơn bạn đã trả lời, đây chính xác là những gì tôi theo sau. Cảm ơn bạn. – Smitty

5

Đối với số nhị phân n-bit, có 2^n "hoán vị". Bạn chỉ cần lặp qua các số nguyên từ 0 đến (1<<n)-1 và chuyển đổi từng số nguyên thành nhị phân.

+0

bạn có nghĩa là vòng lặp từ 0 - (2^n) -1? – ChrisWue

+0

@ Chris: Đúng vậy! –

1

Nó giúp biết có bao nhiêu khả năng.

2^4 = 16, phải không?

Nó cũng sẽ giúp bạn biết được this.

Đây là cách tôi muốn làm điều đó:

/** 
* 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

Cảm ơn sự giúp đỡ của bạn, điều này rất hữu ích và tôi sẽ đào sâu vào điều này ngay bây giờ :) – Smitty

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

Điều chỉnh tối đa cho cao như bạn muốn đi.

Nếu bạn cần đệm 0 của, đã có một câu hỏi trên mà chỉ hôm nay: Pad a binary String equal to zero ("0") with leading zeros in Java

+0

Điều này sẽ không cung cấp cho đầu ra mong muốn. –

+0

Vì đây có thể là bài tập về nhà, đây là một chi tiết nhỏ có thể được khắc phục bởi OP. :-) – ziesemer

0

Để tìm tất cả các hoán vị có thể của một chuỗi nhị phân nhất định (mẫu) ví dụ

Các hoán vị của 1000 là 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

giải pháp của tôi sử dụng các thuật toán quay lui. Chỉ cần in tất cả các kết hợp bằng cách sử dụng '0' và sau đó '1'. Đó không phải là tốt hơn so với câu trả lời chấp nhận nhưng chỉ là một cách nhiều hơn để giải quyết vấn problem.As một ví dụ chỉ gọi hàm như dưới đây từ chính()

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); 
      } 

     } 
Các vấn đề liên quan