子集生成 二進位制方法與遞迴方法

2021-08-10 14:46:17 字數 1624 閱讀 6215

二進位制方法:

#include 

#include

using

namespace

std;

int n ;

vector

con;

void get_sub(int input)

}printf("}\n");

}int main(int argc, char

const *argv)

int i = 0;

while ( '0'

<= length[i] && length[i] <= '9')

if (i == (length.size() ))

else

if (n == 0)

else

printf("您輸入的集合為:

printf("}\n下面輸出其子集:\n");

for (int i = 0; i < (1

<< n); i++)//對於乙個n個元素的集合 其子集有2^n-1個

printf("\n");

printf("該集合總共有子集 %d 個\n", 1

<< n);

}} else

con.clear();

}return

0;}

遞迴方法:

#include 

#include

#include

using

namespace

std;

int n;

vector

con;

vector

indexcon;

//indexcon代表下標對應的元素是否在新的集合中。

//con是真正裝載資料的陣列。

void get_sub(vector

indexcon, int pos)

}printf("}\n");

return;

}indexcon[pos] = 0; //不取用pos位置處的元素

get_sub(indexcon, pos + 1);

indexcon[pos] = 1;//取用pos位置處的元素

get_sub(indexcon, pos + 1);

}int main(int argc, char

const *argv)

int i = 0;

while ( '0'

<= length[i] && length[i] <= '9')

if (i == (length.size() ))

else

if (n == 0)

else

printf("您輸入的集合為:

printf("}\n下面輸出其子集:\n");

get_sub(indexcon, 0);

printf("\n");

printf("該集合總共有子集 %d 個\n", 1

<< n);

}} else

con.clear();

indexcon.clear();

}return

0;}

二進位制子集生成

之前看 演算法競賽入門經典 這本書,看到了子集生成部分,以為自己沒有看二進位制法。誰知整理部落格的時候發現很早之前就學習過了,然而我描述的不完整,看了半天沒看懂什麼意思,果然欠下的都是要還的。用二進位制表示子集,其中從右往左第i位 從0開始編號 表示元素i是否在集合中。在集合表示法中,1 i 表示第...

CCS編譯生成二進位制檔案方法

ccs預設生成的檔案時coff格式的,預設.out檔案即為該檔案格式,如果想生成二進位制檔案,如下設定ccs。1 工程 右鍵 show build settings.2 右側build,左邊setps build steps填入下列內容。utils tiobj2bin tiobj2bin bin b...

二進位制列舉子集

利用二進位制的 開關 特性列舉 詳細為 如果給定集合a大小為n,則想象a 的每乙個元素相應乙個開關位 0或1 0表示不出現,1表示出現。當每乙個元素的開關位的值確定時,就得到乙個子集。因此共同擁有2 n 1種情況 全0為空集,這裡不考慮 我們利用區間 1,2 n 1 該區間上的每乙個整數相應乙個子集...