排列:
#include <stdio.h>
#include <stdlib.h>
void swap(int *a,int *b)
{
int flag;
flag=*a;
*a=*b;
*b=flag;
}
void print(int *s,int len)
{
for(int i=0;i<len;i++)
printf("%d ",s[i]);
printf("\n");
}
void pailie(int *a,int length,int start,int end)
{
if(a==NULL && length < 0)
return;
if(start == end)
print(a,length);
for(int i=start;i<length;i++)
{
swap(&a[0],&a[i]);
pailie(a,length,start+1,end);
swap(&a[i],&a[0]);
}
}
void main()
{
int a[3]={1,2,3};
pailie(a,3,0,2);
}
答案:
2 1 3
3 2 1
1 2 3
3 1 2
2 3 1
1 2 3
组合:
#include <time.h>
#include <iostream>
using namespace std;
# define MAXN 100
int a[MAXN];
int counts=0;
void comb(int m,int k)
{ int i,j;
for (i=m;i>=k;i--)
{ a[k]=i;
if (k>1)
comb(i-1,k-1);
else
{
counts++;
for (j=a[0];j>0;j--)
printf("%d ",a[j]);
printf("\n");
}
}
}
int main()
{
int m,k;
cout<<"m,k:"<<endl;
cin>>m>>k;
counts=0;
a[0]=k;
comb(m,k);
cout<<counts<<endl;
return 0;
}
答案:
m,k:
5 3
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
10
Press any key to continue