zoukankan      html  css  js  c++  java
  • 组合数计算

    计算组合数C(m,n) 即从m个总体中取出n个的取法总数。

    一、直接用公式

    C(m,n)=m!/((m-n)!*n!)   或 C(m,n)=m*(m-1)*……*(m-n+1)/n!

    此方法只能计算较小的组合数

    代码实现:

    #include <iostream>

    using namespace std;

    int main()
    {
      int i,m,n;
      long long sum;
      while(cin>>m>>n)
    {
      sum=1;
      for(i=m;i>m-n;i--)
         sum=sum*i;
      for(i=2;i<=n;i++)
         sum=sum/i;
      cout<<sum<<endl;
    }
    return 0;
    }

    二、递归计算

    当数过大时,其中有很多重复计算,很耗时

    #include <iostream>

    using namespace std;

    long long zuhe(int a,int b)
    {
    if(b==1)
    return a;
    else if(a==b)
    return 1;
    else
    return zuhe(a-1,b)+zuhe(a-1,b-1);
    }

    int main()
    {
    int i,m,n;
    long long sum;
    while(cin>>m>>n)
    {
    sum=zuhe(m,n);
    cout<<sum<<endl;
    }
    return 0;
    }

    三、杨辉三角

    用杨辉三角可以减少重复计算弥补(二)的缺点

    #include <iostream>

    using namespace std;

    int main()
    {
      int i,j,m,n;
      long long a[67][67]={0};
      a[1][1]=1;
      for(i=2;i<=66;i++)
      for(j=1;j<=i;j++)
        a[i][j]=a[i-1][j-1]+a[i-1][j];
      while(cin>>m>>n)
    {
       cout<<a[m+1][n+1]<<endl;
    }
      return 0;
    }

  • 相关阅读:
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    node.js&electron$npm的关系
    前端常用相关缩写
    PS通道抠图
    (AOP)理解
    mybatis内置二级缓存。
  • 原文地址:https://www.cnblogs.com/chen9510/p/4561717.html
Copyright © 2011-2022 走看看