资源描述:
《求排列组合总数的函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、求排列组合总数的函数求排列组合总数的函数看到一个用C语言求排列组合总数的题,一时记不起公式了,翻了下概率书才想起,排列数公式Pmn=m(m-1)…(m-n+1),可以用求阶乘的方法来做。求出排列数,组合数就简单了,Cmn=Pmn/n!而n!=Pnn。根据这个思路,设计程序如下:#includefloatP(intm,intn)/*求排列数函数*/{inti;floatt=m;for(i=1;i2、floats;scanf("%d%d",&m,&n);s=P(m,n)/P(n,n);/*由排列数得到组合数*/printf("C(%d,%d)=%-5.0f",m,n,s);return0;}+expandsourceviewplaincopytoclipboardprint?#includefloatP(intm,intn)/*求排列数函数*/{inti;floatt=m;for(i=1;i3、tn;floats;scanf("%d%d",&m,&n);s=P(m,n)/P(n,n);/*由排列数得到组合数*/printf("C(%d,%d)=%-5.0f",m,n,s);return0;}#includefloatP(intm,intn)/*求排列数函数*/{inti;floatt=m;for(i=1;i4、(n,n);/*由排列数得到组合数*/printf("C(%d,%d)=%-5.0f",m,n,s);return0;}运行结果(VC):==========================103↙C(10,3)=120==========================--------------------------------------------------------------------------------[相关]阶乘->数据的范围------------------------
5、--------------------------------------------------------[补充]直接计算组合数的公式为:Cmn=m!/(n!*(m-n)!),按此公式编写程序如下:#includefloatP(intm,intn)/*求排列数函数*/{inti;floatt=m;for(i=1;i6、oatb=1;/*b为n!,初值为1*/floatc=1;/*c为(m-n)!,初值为1*/for(i=1;i<=m;i++)/*求m的阶乘*/a=a*i;for(i=1;i<=n;i++)/*求n的阶乘*/b=b*i;for(i=1;i<=(m-n);i++)/*求m-n的阶乘*/c=c*i;return(a/(b*c));}intmain(){intm;intn;floats;scanf("%d%d",&m,&n);printf("direct:C(%d,%d)=%-5.0f",m,n,C(m,n
7、));/*直接求得组合数*/s=P(m,n)/P(n,n);/*由排列数间接得到组合数*/printf("indirect:C(%d,%d)=%-5.0f",m,n,s);return0;}+expandsourceviewplaincopytoclipboardprint?#includefloatP(intm,intn)/*求排列数函数*/{inti;floatt=m;for(i=1;i8、求组合数函数*/{inti;floata=1;/*a为m!,初值为1*/floatb=1;/*b为n!,初值为1*/floatc=1;/*c为(m-n)!,初值为1*/for(i=1;i<=m;i++)/*求m的阶乘*/a=a*i;for(i=1;i<=n;i++)/*求n的阶乘*/b=b*i;for(i=1;i<=(m-n);i++)/*求m-n的阶乘*/c=c*i;return(a/(b*c));}intmain(){in