33,027
社区成员




#include<iostream>
using namespace std;
bool nextcomb(int *data, int *p, int n, int m)
{
int last = n-1;
int i, j, k, temp;
i = last;
while(i>0 && !(p[i-1]==1 && p[i]==0))
i--;
if(i == 0)
return false;
p[i]=1;
p[i-1]=0;
if( data[i] == data[i-1] )
{
return nextcomb(data,p,n,m);
}
else
{
for(j=last, k=i+1; k<j; k++,j--)
{
temp = p[k];
p[k] = p[j];
p[j] = temp;
}
for(int h=0; h<n; h++)
{
if(p[h]==1) cout<<data[h]<<" ";
}
cout<<endl;
return true;
}
}
int allCombo(int data[], int n, int m)
{
int i;
int *p = new int[n];
for(i=0; i<m; i++)
{
p[i]=1;
cout<<data[i]<<" ";
}
cout<<endl;
for(i=m; i<n; i++)
p[i]=0;
int count = 1;
while( nextcomb(data,p,n,m) )
{
count++;
}
delete p;
return count;
}
int main()
{
int data[]={2,2,3,3,5};
cout<<"共有"<<allCombo(data, 5, 3)<<"种";
return 0;
}