m元素集合的n個元素子集

2021-08-19 15:47:06 字數 1093 閱讀 1468

/*

m元素集合的n個元素子集

說明:

假設有個集合擁有m個元素,任意的從集合中取出n個元素,則這n個元素所形成的可能子集有那些?

解法:

假設有5個元素的集點,取出3個元素的可能子集如下:

、 、 、 、 、 、 、 、 、這些子集已經使用字

典順序排列,如此才可以觀察出一些規則:

如果最右乙個元素小於m,則如同碼表一樣的不斷加 1

如果右邊一位已至最大值,則加1的位置往左移

每次加1的位置往左移後,必須重新調整右邊的元素為遞減順序

所以關鍵點就在於哪乙個位置必須進行加1的動作,到底是最右乙個位置要加1?

還是其它的位置?在實際撰寫程式時,可以使用乙個變數positon來記錄加1的位置,position的初值設定為n-1 ,因為我們要使用陣

列,而最右邊的索引值為最大 的n-1,在position位置的值若小於m就不斷加1,如果大於m 了, position就減1,也就是往左移乙個

位置;由於位置左移後,右邊的元素會 經過調整,所以我們必須檢查最右邊的元素是否小於m,如果是,則position調整回n-1,如

果不是,則positon維持不變。

*/#include

#include

#define max 20

int main(void

)

for(i = 0; i < n; i++)

putchar('\n

');position = n - 1

;

while(1

)

else

set[position]++;

for(i = position + 1; i < n; i++)

for(i = 0; i < n; i++)

putchar('\n

');if(set[0] >= m - n + 1

)

}return0;

}

執行結果:

m 元素集合的n 個元素子集

說明 假設有個集合擁有m個元素,任意的從集合中取出n個元素,則這n個元素所形成的可能子集有那些?c m,n m n m n 解法 假設有5個元素的集點,取出3個元素的可能子集如下 這些子集已經使用字典順序排列,如此才可以觀察出一些規則 1 如果最右乙個元素小於m,則如同碼表一樣的不斷加1 2 如果右...

C 經典演算法題 m 元素集合的n 個元素子集

假設有個集合擁有m個元素,任意的從集合中取出n個元素,則這n個元素所形成的可能子集有那些?假設有5個元素的集點,取出3個元素的可能子集如下 這些子集已經使用字典順序排列,如此才可以觀察出一些規則 如果最右乙個元素小於m,則如同碼表一樣的不斷加1 如果右邊一位已至最大值,則加1的位置往左移 每次加1的...

經典演算法 排列組合 N元素集合的M元素子集

題目說明 假設有個集合擁有n個元素,任意的從集合中取出m個元素,則這m個元素所形成的可能子集有那些?題目解析 假設有5個元素的集合,取出3個元素的可能子集如下 這些子集已經使用字典順序排列,如此才可以觀察出一些規則 如果最右乙個元素小於m,則如上面一樣的不斷加1 如果右邊一位已至最大值,則加1的位置...