2012-01-08 41 views
0

我想一個算法來做到以下幾點:當輸入例如3我要像下面每生產3位號:什麼是生成每個k位數的算法?

000 
001 
010 
011 
100 
101 
110 
111 

編輯:感謝您對所有的答案,但我更喜歡一種將'1'和'0'作爲字符並將整個答案當作字符串的算法,以便我可以擴展字符的答案。像產生具有的3

+1

是這個家庭作業? (如果它是標記的話) – 2012-01-08 20:07:07

+1

你試過了什麼? – mc10 2012-01-08 20:09:12

+1

[Java中所有二進制組合列表]的可能重複(http://stackoverflow.com/questions/6463372/list-of-all-binary-combinations-for-a-number-in-java) – 2012-01-08 20:27:34

回答

7

長度的a,b,c每個可能的組合的直向前算法將是:

  • 計算2^n-1;在你的情況下,7

  • for i = 0 : 7轉換i以二進制形式

  • 輸出二進制形式

+0

+1否則稱爲「計數」給小學的孩子。 – 2013-12-30 02:14:57

1

這意味着零和2之間的每個數字^ N-1,n爲你的位數

+0

它是2^n-1。 [...] – 2012-01-08 20:13:53

+0

是的,在數學中,我的陳述是正確的,我的意思是我沒有說0和2 **之間,包括2 ** n – 2012-01-08 20:15:48

+0

但是,這不就是說你沒有離開嗎?因爲你也沒有說包括0 ...:P – 2012-01-08 20:16:30

0

也許你可以使用遞歸算法。這是用Java編寫的:

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

你會喜歡這個執行此:

printBin("", 3); 

這將使你有3個數字的所有可能的二進制數。

但是,請注意,如果數字量非常大,則可能會發生溢出。

希望這有助於!

0

你想要做的是generate combinations在文章中的代碼不應該太難以使用模塊化算術推廣所有字符。或者,也可以將字符映射到數字值上,計算排列,然後映射回字符。

1

下面是一些僞代碼,應該可以幫助您:

function listNumbers (bits : Int) : List<String> { 
    l = []; 
    if (bits == 0) { 
    l.append("");   
    } else { 
    prev = listNumbers(bits-1); 
    for (number in prev) { 
     l.append("0" + number); 
     l.append("1" + number); 
    } 
    } 
    return l; 
}