• 当前位置:首页>>C语言>>C语言编程实例>>C趣味程序(二)(10)
  • C趣味程序(二)(10)
  • 2.4 组合数
        计算从m个元素中取n个元素的组合数C(m,n),其中m,n满足0<=n<=m。
    计算公式如下:


    按式(2)设计程序更为简结。

    根据(1)式的程序设计
    #include<stdio.h>
    void g(double *p,int k);
    double p=0,c;
    void main()
    {
        int m,n,k;
        printf("输入 m,n = ");
        scanf("%d,%d",&m,&n);
        if(m<n) printf("m比n小,错误!");
        if(n==0||m==n) c=1;
        else
        {
            k=m;g(&p,k);c=p;
            k=n;g(&p,k);c=c/p;
            k=m-n;g(&p,k);c=c/p;
        }
        printf("c( %d, %d )= %.f\n",m,n,c);
    }
    void g(double *p,int k)
    {
        int i;
     *p=1;
        for(i=1;i<=k;){*p=*p*i;i++;}
    }
    运行结果如下:
    输入 m,n= 20,5
    C(20,5) = 15504

    --------------------------

    根据式(2)设计的程序
    #include<stdio.h>
    void main()
    {
        int c=0,m,n,k;
        printf("输入m,n:= ");
        scanf("%d,%d",&m,&n);
        if(m<n)printf("输入错误,m不能小于n.\n");
        printf("c( %d, %d) = ",m,n);
        if(n==0||m==n) printf("end");
        if(n>m/2) n=m-n;
        c=1;
        for(k=1;k<=n;k++)
            c=c*(m-k+1)/k;
        printf("%d",c);
    }
    运行结果如下:
    输入 m,n = 50,2
    C(50,2) = 1225  

    [1]