我想问问有m个数,如果任意输入n,可以实现m中取n的组合算法,数字不可以允许重复。比如有3个数1,2,3,n=3,则一共有123,132,213,231,312
我想问问有m个数,如果任意输入n,可以实现m中取n的组合算法,数字不可以允许重复。比如有3个数1,2,3,n=3,则一共有123,132,213,231,312,321种取法。即需要满足公式,A(m,n)=(m)!/(N-1)!
2011-09-11 10:54
程序代码:#include <stdio.h>
int data[100] = {5,4,3,2,1};
bool foot[100] = {0};
int cool = 0;
void com(int n,int k,int mem[],int depth,int begin)
{
int i,j;
if(k == depth)
{
for(i = 0;i<k;i++)
printf("%d ",mem[i]);
cool++;
printf("\n");
return ;
}
for(i = 0;i<n;i++)
{
if(!foot[i])
{
foot[i] = true;
mem[begin] = data[i];
com(n,k,mem,depth+1,begin+1);
foot[i] = false;
}
}
}
int main()
{
int mem[100] = {0};
com(5,3,mem,0,0);
return 0;
}
排列数
程序代码:#include <stdio.h>
int data[100] = {5,4,3,2,1};
bool foot[100] = {0};
int cool = 0;
void com(int n,int k,int mem[],int depth,int begin,int pos)
{
int i,j;
if(k == depth)
{
for(i = 0;i<k;i++)
printf("%d ",mem[i]);
cool++;
printf("\n");
return ;
}
for(i = pos;i<n;i++)
{
if(!foot[i])
{
foot[i] = true;
mem[begin] = data[i];
com(n,k,mem,depth+1,begin+1,i+1);
foot[i] = false;
}
}
}
int main()
{
int mem[100] = {0};
com(5,3,mem,0,0,0);
return 0;
}
组合数
2011-09-11 11:08

2011-09-11 11:08