int Selected( int * data )
{
int count = 0;
while( *data != -1 )
{
if( *data == 0 )
count ++;
data ++;
}
return count;
}
int GetData( int index , int * data )
{
if( index == -1 )
return -1;
data += index;
while( *data != -1 )
{
if( *data )
{
int temp = *data;
*data = 0;
return temp;
}
data ++;
}
return -1;
}
int ListSubSet( int _Data , int * data , int sum )
{
int selected = Selected(data);
if( sum >= selected )
{
int Data = _Data;
while( Data != -1 )
{
str[ selected - 1 ] = Data + '0';
Data = GetData( Data , data );
if ( ListSubSet( Data , data , sum ) )
{
if( selected == sum )
{
printf( "%s\n" , str );
}
}
else
return 0;
if( Selected(data) == 0 )
return 0;
data[ Data - 1 ] = Data;
}
}
return 1;
}
void main()
{
int Data = 0;
int data[ COUNT + 1 ];
//初始化集合
for( int i = 0 ; i < COUNT ; i ++ )
data[i] = i+1;
data[ COUNT ]= -1;
//清屏
clrscr();
//计算
Data = GetData( 0 , data );
ListSubSet( Data , data , 8 );//ListSubSet( 起始元素 , 集合 , 子集的大小 );
getch();
}
zhangdr()的话不要那么夸张嘛!!!
该题是否为从n个元素中取k个(包括0个)
如果是,那就班门弄斧了。
若做对了,别忘了给我加分了。
用pascal解。
procedure aa(s:set of 1..n m:integer);
begin
print(s);
for i:=m+1 to n do
aa(s+[i],i)
end;
int main()
{
int n;
char *a;
printf("please input n: ");
scanf("%d",&n);
printf("Following are the subsets:\n");
a = new char[5*n];
strcpy(a,"{");
subset(n,a);
}