幂集Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
Total Submission: 74 Submission Accepted: 23Description所谓幂集, 就是原集合中所有的子集(包括全集和空集)构成的集族。我们现在的事就是输出一个集合的幂集 。
Input输入有多组数据。每行一个集合。非空集合格式为{x1,x2,…,xi}。其中xi为一个一位数字且互不相等(0<=xi<=9,1<=i<=10)。空集为一对空括号”{}”。输入到文件结束。
Output对于每组数据,按输出其幂集。格式为
{
子集1,
子集2,
…
子集j
}
每个子集内部的元素按从小到大输出,并且元素之间用’,’分隔。子集按照其内部元素的个数从小到大输出,如果两个子集的元素个数相等,那么就按照其从小到大拼接的字符串的词典序从小到大输出,子集与子集之间用’,’和一个换行符分隔。
Sample InputOriginalTransformed
Sample OutputOriginalTransformed
Total Submission: 74 Submission Accepted: 23Description所谓幂集, 就是原集合中所有的子集(包括全集和空集)构成的集族。我们现在的事就是输出一个集合的幂集 。
Input输入有多组数据。每行一个集合。非空集合格式为{x1,x2,…,xi}。其中xi为一个一位数字且互不相等(0<=xi<=9,1<=i<=10)。空集为一对空括号”{}”。输入到文件结束。
Output对于每组数据,按输出其幂集。格式为
{
子集1,
子集2,
…
子集j
}
每个子集内部的元素按从小到大输出,并且元素之间用’,’分隔。子集按照其内部元素的个数从小到大输出,如果两个子集的元素个数相等,那么就按照其从小到大拼接的字符串的词典序从小到大输出,子集与子集之间用’,’和一个换行符分隔。
Sample InputOriginalTransformed
{1} {1,2,0}
Sample OutputOriginalTransformed
{ {}, {1} } { {}, {0}, {1}, {2}, {0,1}, {0,2}, {1,2}, {0,1,2} }
我做的第一个回溯啊
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(const string& a,const string &b)
{
if(a.length()!=b.length()) return a.size()<b.size();
return a<b;
}
int a[12],d[12],fl;
vector<string> svec;
void back(int i,int *a)
{
if(i==fl)
{
string s;
for(i=0;i<fl;i++)
{
if(d[i]==1)s+=a[i]+'0';
}
svec.push_back(s);
return ;
}
d[i]=1;back(i+1,a);
d[i]=0;back(i+1,a);
return ;
}
int main()
{
char str[30];
while(gets(str)!=NULL)
{
memset(d,0,sizeof(d));
svec.clear();
int len=strlen(str);
int k=0,i=0;
for(i=0;i<len;i++)
{
if(str[i]=='{'||str[i]==',')continue;
else if(str[i]=='}')break;
else a[k++]=str[i]-'0';
}
fl=k;
sort(a,a+fl);
back(0,a);
sort(svec.begin(),svec.end(),cmp);
vector<string>::iterator it=svec.begin();
printf("{\n");
while(it!=svec.end())
{
string fs=*it;
printf("{");
for(int i=0;i<fs.size();i++)
{
if(i==0) printf("%c",fs[i]);
else printf(",%c",fs[i]);
}
if(it+1!=svec.end())printf("},\n");
else printf("}\n");
it++;
}
printf("}\n");
}
return 0;
}