m中选择n个数的组合的数量

6 篇文章 0 订阅
/**
 m中选择n个数的组合的数量
 公式:C(m, n)=m*(m-1)*(m-2)...<n个数>/n*(n-1)*(n-2)...1
 eg:C(10, 5)=(10*9*8*7*6)/(5*4*3*2*1);
 
 @param 	m 	数组中元素的总数
 @param 	n 	数组中选择n个数

 @return	组合的数量
 */
+ (NSInteger)getCombineCountWithM:(NSInteger)m n:(NSInteger)n

{
    NSInteger result = 0;
    
    if (m == n) {
        result = 1;
    }else if (m == n+1) {
        result = m;
    }else if (m > n+1) {
        //C(m,n)
        NSInteger numerator = 1;
        for (NSInteger i=n; i>0; i--) {
            numerator = numerator * i;
        }
        
        NSInteger denominator = 1;
        for (NSInteger j=m; j>m-n; j--) {
            denominator = denominator * j;
        }
        
        result = denominator/numerator;
    }else{
        result = 0;
    }
    
    return  result;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值