演算法作業 求乙個集合中所有子集元素之和

2021-09-08 00:06:12 字數 730 閱讀 1286

求乙個集合中所有子集元素之和。如

由於集合中元素具有無序性, 所以集合中每個元素在子集**現的次數是相同的。這樣的話,問題就簡單了,求所有子集元素的和就可以簡化為求每個元素在子集**現的次數*全集中所有元素的和。全集中所有元素的和好求,就是n*(n+1)/2。

集合中任何乙個元素出現的次數,比如1,我們可以這樣來求:

首先乙個集合的子集個數是2n,這個都學過,我就不推導了。

我們想求 1 出現 的次數,不好求,我們可以轉化為求 1 不出現的次數,1 不出現的次數就是原來集合中除了元素 1 的元素的集合的子集個數。不明白??舉個例子

這個集合子集的個數是24,除去 1 之後集合就變為 這個集合的子集個數是23,也就是說只有這些集合中沒有 1 ,我們想求的 1 出現的個數就是24-23

所以在含n個元素的集合中,任何乙個元素在子集**現的次數就是2n-2n-1=2n-1

所以集合中所有元素之和sum=(n*(n+1)/2)*(2n-1)

#include

#include

int main() {

int n,sum;

printf(

"輸入數字 n : 

"); 

scanf(

"%d",&n);

sum=pow(

2,n-

1)*(n*(n+

1)/2);

printf(

"和為%d\n

",sum);

演算法作業 求乙個集合中所有子集元素之和

求乙個集合中所有子集元素之和。如 由於集合中元素具有無序性,所以集合中每個元素在子集 現的次數是相同的。這樣的話,問題就簡單了,求所有子集元素的和就可以簡化為求每個元素在子集 現的次數 全集中所有元素的和。全集中所有元素的和好求,就是n n 1 2。集合中任何乙個元素出現的次數,比如1,我們可以這樣...

求乙個集合所有可能的子集

增量構造法 一次選出乙個元素放到集合中 include includeusing namespace std const int max 100 int layer 1 遞迴層數 int count1 0 void print subset int n,int a,vector vi,int cur...

求乙個集合的所有子集 java實現

求乙個集合的所有子集表示從乙個集合當中,任取任意項或不取,所能得到的所有結果,比如有乙個集合,那麼,等都是它的子集,空集也是它的子集,乙個具有n 個元素的集合,它的子集共有2 n個,因為對於每個元素都有兩種可能 選與不選。如果用1來表示選擇,0表示不選,那麼四個元素的集合選擇情況可以表示為 0000...