C 利用位運算列舉集合的所有子集

2021-08-25 22:50:02 字數 770 閱讀 4730

這裡有如下知識點:

(1)>>代表二進位制右移一位,即:最前面的那位變成0,最後面的那位被「乾掉」

(2)《代表二進位制左移一位,即:在最後麵加乙個0,前面的序列不變

(3)&運算子:對於運算的兩個數,只有當對應位均為1時該位的運算結果等於1,否則該位的運算結果為0

(4)(x>>0) & 1可以取出x的最後一位(二進位制) => 推廣:(x>>i) & 1可以取出x的從二進位制右邊數的第i+1位

(5)(1>>n) - 1為二進位制下的11111....11111(n個1)

由此,我們將x從00000...000(n個)到111111...111遍歷,每次不斷地取出x的所有位。若該位上的數字為1,則代表取出集合s中對應位置的元素並加入子集,否則不取。

c++ **如下:

#include #include using namespace std;

sets;

int a = ;

int main()

for (auto it : s)

cout << it << " ";

cout << endl;

}return 0;

}

當然,也可以直接列舉0-1序列:

#include using namespace std;

int a = ;

int main()

cout << endl;

}return 0;

}

列舉集合所有子集。

列舉集合所有子集。包括空集與該集合本身,共2的n次方個。列舉集合所有子集。包括空集與該集合本身,共2的n次方個。include include using namespace std template void print elements t array,unsigned int count,un...

列舉乙個集合的所有子集

數字範圍是0 9,即集合元素在10個及以下 ifndef subset h define subset h class subset endif subset h include include subset.h using namespace std int main array1.find su...

利用位運算求子集

紫書第189頁 給你乙個集合,讓你求集合的所有子集 我們都知道長為n的集合子集個數為 2 n 個 包含了空集 一般都是遞迴求子集,沒想到還可以運用位運算求 具體思路就不展開了,總的來說就是每個元素在子集裡都有兩種情況 取或不取 可以用0和1來代表,這就跟位運算的性質所吻合 include defin...