我們都知道,乙個含n個元素的集合擁有2^n個子集合,並且不難發現,其中每個子集合都是從0到2^n-1 每個數的二進位制格式中0 放棄,1選擇的結果,如下所示:
{} 000
100010
110001
101011
111所以根據數字的二進位制轉換,可以輕鬆獲得乙個集合的所有子集合,**如下:
sub getall(byval mycollection as string, byref result() as string)
dim x() as string
x = split(mid(mycollection, 2, len(mycollection) - 2), ",")
dim a() as string, b() as integer '臨時陣列
dim n as integer ' 集合元素個數
dim i as long '迴圈變數
dim num as integer '子集合元素個數
dim temp as integer '二進位制轉換中間變數
n = ubound(x) + 1
redim b(0 to n - 1)
redim result(2 ^ n - 1)
debug.print "集合 " & mycollection & " 共有子集合 " & 2 ^ n & " 個!"
for i = 0 to 2 ^ n - 1
temp = i
num = 0
for j = 0 to n - 1 '轉換為二進位制
b(j) = temp and 1 '0 or 1
temp = temp \ 2
if b(j) = 1 then
num = num + 1
redim preserve a(1 to num)
a(num) = x(j)
end if
next
result(i) = "" '結果儲存
debug.print result(i) '輸出
next
msgbox "ok"
end sub
private sub command1_click()
dim s() as string
getall "", s
end sub
輸出:集合 共有子集合 64 個!
{}
輸出乙個集合的所有子集合
面試遇上了這個問題,思量了會,想到用遞迴的方式解決這個問題。回來網上搜尋了下,發現通過二進位制的思想來解決這個問題更容易,下面我把兩種解決方式的思想及原碼分享出來。我們都知道,乙個含n個元素的集合擁有2 n個子集合,並且不難發現,其中每個子集合都是從0到2 n 1 每個數的二進位制格式中0 放棄,1...
子集合問題,排列出所有子集組合
想了好幾天,網上也沒有給出具體方法,索性就自己寫了乙個,但是效率不是很高,可以根據需求進行優化 public static void subset int arr,int target,list alllist else 遞迴結果集 public static void recursion int ...
素因子集合
題目詳情 小強最近在學初等數論,老師給他們出了乙個課後習題,那就是給你兩個正整數a,b 0 輸入描述 輸入包含多組測試資料,每組測試資料報含兩個正整數a,b,以檔案結束。輸出描述 對於每組測試資料如果a和b的素因子集合相同則輸出 yes 否則輸出 no 答題說明 輸入樣例 2 84 9 10 50 ...