m0_61742809 2021-12-07 18:08 采纳率: 42.9%
浏览 32
已结题

求集合的所有子集(数组) 在本地运行答案没有问题,但是在oj上一直显示错误!

题目描述

一个元素个数为n(n>0)的集合,有2n个子集(包括空集)。例如,集合A={a,b,c}的子集有23=8个,分别为:{}(空集)、{a}、{b}、{a、b}、{c}、{a,c},{b,c},{a,b,c}。

输入一集合(假设集合元素为字符),给出该集合的所有子集。子集的输出顺序根据样例输出分析得出。

输入

测试次数t
每组测试数据格式为:集合元素个数n,后跟集合的n个元素。

输出

对每组测试数据,输出子集个数,后面每行一个子集,输出所有子集。

输入样例
2
3
a b c
4
e f a d

输出样例

8
{}
{a}
{b}
{a,b}
{c}
{a,c}
{b,c}
{a,b,c}

16
{}
{e}
{f}
{e,f}
{a}
{e,a}
{f,a}
{e,f,a}
{d}
{e,d}
{f,d}
{e,f,d}
{a,d}
{e,a,d}
{f,a,d}
{e,f,a,d}


我的代码

# include<stdio.h>
# include<math.h>
# include<memory.h>
int main()
{
    int t,n,i,count,j,m,k,q,p; //count是记录子集个数 
    scanf("%d",&t);
    for(q=1;q<=t;q++)
    {
        count=0;
        scanf("%d",&n);
        getchar();
        int a[n];
        memset(a,0,n*sizeof(int));
        char str[n];
        for(i=0;i<n;i++)
        {
        scanf("%c",&str[i]);
        getchar();
        }
        count=pow(2,n);
        printf("%d\n",count);
        printf("{}\n"); //第一个空集; 
        for(j=1;j<count;j++)
        {
            m=j;
            k=0;
            while(m!=0)
            {
            a[k]=m%2;
            m=m/2;
            k++;    
            }    
            printf("{");
            for(i=0;i<n;i++)
            {
                if(a[i]==1)
                {
                    printf("%c,",str[i]);    
                }
            }
            printf("\b}\n");    
                
            
        }
        if(q!=t)
        {
        printf("\n");
        }
        
        
    }
}

本地运行结果

img


所以哪里错了 求解答!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 12月7日
    • 创建了问题 12月7日

    悬赏问题

    • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
    • ¥20 遥感植被物候指数空间分布图制作
    • ¥15 安装了xlrd库但是import不了…
    • ¥20 Github上传代码没有contribution和activity记录
    • ¥20 SNETCracker
    • ¥15 数学建模大赛交通流量控制
    • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
    • ¥50 paddleocr最下面一行似乎无法识别
    • ¥15 求某类社交网络数据集
    • ¥15 靶向捕获探针方法/参考文献