梁乃元 • 2个月前
很简单,就不讲了
int n ;
cin >> n ;
∵ 每个元素可以选或者不选 ∴ 总共循环2^n次( 1 << n ),且每次的i的二进制第j位对应第j个元素选或不选的状态( 0 / 1 ) 可以设置一个函数来获取子集
string out ( int x )
{
string ans = "(" ;
for ( int i = 0 ; i < n ; i ++ )
{
if ( ( 1 << i ) & x )
{
ans += char ( i + 'a' ) ;
}
}
ans += ')' ;
return ans ;
}
输出所有子集,每个子集占一行,按字典序排序。
∴ 要对获得的答案进行排序
sort ( s + 1 , s + ( 1 << n ) ) ; // s是上面处理后的答案组成的字符串数组
最后输出即可
for ( int i = 1 ; i < ( 1 << n ) ; i ++ )
{
cout << s [i] << endl ;
}
评论: