Ответ:
Всего нет. Подмножеств 2^n.
Поскольку нам не требуется пустое множество, то полные требуемые подмножества 2^n - 1. Теперь все, что нам нужно сделать, это просто получить все возможные подмножества.
Этот алгоритм поможет.
void main()
{
//Total no. of elements in set = n;
//Let's say the Set be denoted as P[n]
//declare a global variable sum and initialize to 0.
for(int i=1;i<=n;i++)
{
int r = nCi;
//here, r = nCi or you can say n combinations i
//it's good to write an extra function named something like "nCi" to evaluate nCi and call it when required.
//define a new two dimensional array of size "r","i", say s[r][i]
for(int k=0;k<r;k++)
{
//define a function to get all combination array for s[r][i] using "i" elements out of total "n"
//This link will help you with best of code for this particular function
//<http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/>
//now for every particular s[r][i], do this
for(int j=0;j<i;j++)
{
sum = sum + s[r][j];
}
}
}
//display total output
printf("%d",sum);
}
Я предлагаю вам попробовать что-то вместо того, чтобы просить прямое решение того, что выглядит как домашнее задание – Coconop
@ Coconop, первый из все это не проблема домашней работы, я пытаюсь поймать эффективный алгоритм. –
Хорошо, «не домашнее задание». Тем не менее, философия SO - «мы даем вам помощь, если вы продемонстрируете некоторые исследовательские усилия». В любом случае, к счастью, у вас уже есть отличные подсказки бесплатно. – Coconop