求Cmn 值?输入任意 m 与 n值(两值大小须判断),给 出Cmn 结果.JAVA的 给定求组合数公式为:C(n,m)=m!/n!(m-n)!,编...

作者&投稿:栋怪 (若有异议请与网页底部的电邮联系)
Cmn是什么意思
/*该代码实现功能为数学中的C(n,m),n为下标,m为上标。
比如C(5,2)=(5*4)/(2*1);又比如C(10,7)=C(10,3)=(10*9*8)/(3*2*1);*/
package Cnm;
public class Cnm
{
public int jiecheng(int p)
{
int a = 1;
for(int i = 1; i < p+1; i++)
{
a = i * a;
}
return a;
}

public int chengfa(int b,int c)
{
int d = 1;
for(int i = b; i > b-c; i--)
{
d = i * d;
}
return d;
}

public float c(int n, int m)
{
float q;
Cnm nm = new Cnm();
return q = nm.chengfa(n, m)/nm.jiecheng(m);
}

public static void main(String[] args)
{
// TODO Auto-generated method stub
Cnm nm = new Cnm();
System.out.println("c(10,3)的结果为:"
+ nm.chengfa(10,3) + "/" + nm.jiecheng(3)
+ "=" + nm.c(10,3));
System.out.println("c(10,7)的结果为:"
+ nm.chengfa(10,7) + "/" + nm.jiecheng(7)
+ "=" + nm.c(10,7));
}
}

求排列么?

请给出cmn的意思

有两个整数m和n,计算并输出Cmn的值.要求编写一个函数来完成计算~

int表示的数据不够用,采用double才可以! 算法还要改进!#includedouble fac(int a){int i;double s=1;for(i=a;i>=1;i--){s=s*i;}return s;}int main(){int m,n;double C;while(scanf("%d %d",&m,&n)!=EOF)//这里多了个分号,要去掉{int i,j;if ( nj;i-- ) //先约去m-n的阶乘{C *= i ;}C /= fac(n); //再除以n的阶乘printf("%.0f
",C);}return 0;}另,更好的算法,应该是采用数组,不用阶乘,把所有能约的数据全去除,这样,应该可以用int类型数据来处理。

#include
int Fabricate(int m,int n);
int multi(int m,int n);
void main()
{
int m,n,answer;
printf("输入m(按q退出):");
while(scanf("%d",&m))
{
printf("输入n:");
scanf("%d",&n);
if(n!=0&&m!=0)//判断m,n是否为0
{
if(m>n) //自动将大数设置为m,小数设置为n
printf( "%d
", Fabricate(m,n));
else
printf( "%d
", Fabricate(n,m));
printf("输入m(按q退出):");
}
else
printf("错误!重新输入,输入m:");

}

}
int Fabricate(int m,int n)
{
int sum_m=1,sum_n=1,sum_mn,sum;
int i=m,j=n;
for(int i=m;i>0;i--)//求m的阶乘
sum_m*=i;
for(int j=0;j>0;j--)//求n的阶乘
sum_n*=j;
sum_mn=multi(m,n);
return (sum_m/sum_n)*sum_mn;

}
int multi(int m,int n)
{
int sum=1;
int k=m-n;
while(k>0)
sum*=k--;
return sum;
}