c语言求组合
⑴ c语言,计算组合数C(A,B)
#include <stdio.h>
double fact(int n);
int main()
{
int i,j,m,n;
double C;
printf("Enter in:
");
scanf("%d %d",&m,&n);
C = fact(n)/(fact(m)*fact(n-m));
printf("The result of C(m,n) is %.1f:
",C);
return 0;
}
double fact(int n)
{
int i;
double termainate;
termainate=1;
for(i=1;i<=n;i++)
{
termainate *= i;
}
return termainate;
}
⑵ c语言编程排列组合
void Show(int n,int len ,char str[], char p[],int *i){/*函数功能说明:
密码穷举法 递归算法参数说明:len 密码可选元素的个数,实际等于 strlen(str);
n 密码位数。
STR[]密码表。
*p 密码排列组合的临时存档*/int a;n--;for(a=0; a < len; a++){p[n]=str[a];
if(n==0)printf("%d:%s ",(*i)++,p);
if(n0)Show(n,len , str,p,i);}}
/*驱动程序 用于测试*/
int main(void){char str[]="abcdef";//密码表 可选元素集合可根据选择修改
int n=4;//密码位数,根据具体应用而定。
int len=strlen(str);//用于密码元素集合计数。
char p[20];//存放排列组合的密码,用于输出。
int num=0;//存放统计个数的整数值,
int *i=#//计数器 地址。
p[n]='\0';//这个不用说啦。
printf("\n%d 位密码,每个密码有%d个选择的话,共有:%d个组合。\n",n,len,*i);return 0;}
以上回答你满意么?
⑶ C语言如何实现任意数排列组合,新手求助,急
求排列组合没有简单方法。方法只有一个,枚举。
有几个位置需要列举,就需要几个循环。如果循环数量太多,可以用函数递归来枚举。
例程:
#include<stdio.h>
intmain(){
inta[4]={1,3,4,7};//第一个位置
intb[4]={2,5,8,10};//第二个位置
intc[4]={6,9,11,12};//第三个位置
inti,j,k;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
printf("%d%d%d ,",a[i],b[j],c[k]);//输出一种排列
getch();
return0;
}
⑷ c语言从n个数中选m个数的组合
#include<stdio.h>
unsignedlongfactorial(intn);
unsignedlongcombination(intn,intm);
intmain(){
intn,m;
scanf("%d%d",&n,&m);
printf("combination(%d,%d)=%u
",n,m,combination(n,m));
return0;
}
unsignedlongcombination(intn,intm){
unsignedlongres=1;
res=factorial(n)/((factorial(n-m)*factorial(m)));
returnres;
}
unsignedlongfactorial(intn){
inti;
unsignedlongf=1;
for(i=1;i<=n;i++)
f*=i;
returnf;
}