回 帖 发 新 帖 刷新版面

主题:求子集

n个元素的集合{1、 2、 3、…、n}可以划分为若干非空子集。例如,n=3时,集合{1、2、3}可分为:
{{1}、{2}、{3}}   
{{1、2}、{3}}    
{{1、3}、{2}}    
{{2、3}、{3}}     
{{1、2、3}}
请编写程序求n 个元素集合{1、2、…、n}的所有非空子集,并输出n 个元素集合的所有非空子集。

回复列表 (共3个回复)

沙发

#include "stdio.h"

int main()
{
    int n;
    int i;
    int j;
    int s;
    int flag;
    scanf("%d", &n);
    if(n > sizeof(n) * 8 -1)
        return -1;
    s = 1 << n;
    for(i = 1; i < s; i++)
    {
        printf("{");
        flag = 1;
        for(j = 0; j < n; j++)
        {
            if(i & 1 << j)
            {
                if(flag)
                {
                    flag = 0;
                    printf("%d", j + 1);
                }
                else printf(", %d",j + 1);
            }
        }
        printf("}\n");
    }
    return 0;
}

板凳


关于这个方面的知识我在[url=http://www.beidaqingniao.org]北大青鸟[/url]的课程里学到了不少呢,有兴趣可以去看看了解研究下

3 楼


好的[em2]

我来回复

您尚未登录,请登录后再回复。点此登录或注册