我想一個算法來做到以下幾點:當輸入例如3我要像下面每生產3位號:什麼是生成每個k位數的算法?
000
001
010
011
100
101
110
111
編輯:感謝您對所有的答案,但我更喜歡一種將'1'和'0'作爲字符並將整個答案當作字符串的算法,以便我可以擴展字符的答案。像產生具有的3
我想一個算法來做到以下幾點:當輸入例如3我要像下面每生產3位號:什麼是生成每個k位數的算法?
000
001
010
011
100
101
110
111
編輯:感謝您對所有的答案,但我更喜歡一種將'1'和'0'作爲字符並將整個答案當作字符串的算法,以便我可以擴展字符的答案。像產生具有的3
長度的a,b,c
每個可能的組合的直向前算法將是:
計算2^n-1
;在你的情況下,7
。
for i = 0 : 7
轉換i
以二進制形式
輸出二進制形式
+1否則稱爲「計數」給小學的孩子。 – 2013-12-30 02:14:57
這意味着零和2之間的每個數字^ N-1,n爲你的位數
它是2^n-1。 [...] – 2012-01-08 20:13:53
是的,在數學中,我的陳述是正確的,我的意思是我沒有說0和2 **之間,包括2 ** n – 2012-01-08 20:15:48
但是,這不就是說你沒有離開嗎?因爲你也沒有說包括0 ...:P – 2012-01-08 20:16:30
也許你可以使用遞歸算法。這是用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個數字的所有可能的二進制數。
但是,請注意,如果數字量非常大,則可能會發生溢出。
希望這有助於!
你想要做的是generate combinations在文章中的代碼不應該太難以使用模塊化算術推廣所有字符。或者,也可以將字符映射到數字值上,計算排列,然後映射回字符。
下面是一些僞代碼,應該可以幫助您:
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;
}
是這個家庭作業? (如果它是標記的話) – 2012-01-08 20:07:07
你試過了什麼? – mc10 2012-01-08 20:09:12
[Java中所有二進制組合列表]的可能重複(http://stackoverflow.com/questions/6463372/list-of-all-binary-combinations-for-a-number-in-java) – 2012-01-08 20:27:34