求组合数和全排列

#include

using namespace  std;

void swap(int &a,int &b)

{

int temp=a;

a=b;

b=temp;

}

void perm(int a[],int b,int end)

{

if(b>=end)

{

for(int i=0;i<end;i++)

cout<<a[i]<<” “;

cout<<endl;

return;

}

for(int i=b;i<end;i++)

{

swap(a[b],a[i]);

perm(a,b+1,end);

swap(a[b],a[i]);

}

}

void comb(int a[],int n,int k)

{

    bool *temp=new bool[n];

for(int i=0;i<n;i++)

{

if(i<k)

  temp[i]=1;

else

  temp[i]=0;

}

for(int i=0;i<n;i++)

{

if(temp[i]==1)

cout<<a[i]<<” “;

}

cout<<endl;

int flag=1;

for(int j=n-k;j<n;j++)

flag*=temp[j];

while(!flag)

{

int count=0;

for(int i=0;i<n-1;i++)

{

if(temp[i]==1)

count++;

if(temp[i]==1 && temp[i+1]==0)

{

temp[i]=0;

temp[i+1]=1;

count–;

for(int j=0;j<i;j++)

{

if(j<count)

  temp[j]=1;

else

temp[j]=0;

}

break;

}

}

for(int i=0;i<n;i++)

{

if(temp[i]==1)

cout<<a[i]<<” “;

}

cout<<endl;

        flag=1;

for(int j=n-k;j<n;j++)

flag*=temp[j];

}

delete [] temp;

}

void main()

{

int array[5]={1,2,3,4,5};

   comb(array,5,3);

}

点赞