#include
const int MAXN = 10; //n的最大值
const int LEN = MAXN;
//用来打印子集
void printAns(int num[], int len) {
printf("{");
for ( int i = 0; i < len; ++i ){
if ( 0 != i ){
printf(" ");
}
printf("%d", num[i]);
}
printf("}");
}
//递归
void fun( int x, int num[], int len ) {
printAns(num,len);
for ( int i = x-1 ; i>= 1; --i ) {
num[len++] = i;
fun( i, num, len);
len--;
}
}
int main()
{
int number;
int ans[LEN];
scanf("%d", &number);
for ( int i = 1; i <= number; ++i ) {
ans[0] = i;
fun( i, ans, 1 );
}
printAns(ans,0); //空集
return 0;
}
这个不是我写的,同学写的。。。
Ref:
http://hi.baidu.com/hightch/item/f89f53d497643c1fd68ed01d
http://bbs.csdn.net/topics/380062729