参考代码:
前天有奖答题内容:
参考答案:
该问题功能为求解在n个物品中任选i个物品有多少种选法,也就是组合数C(n,i)。
根据组合数定义,需要计算3个数的阶乘,在很多编程语言中都很难直接使用整型变量表示大数的阶乘结果,虽然Python并不存在这个问题,但是计算大数的阶乘仍需要相当多的时间。文中代码提供了另一种计算方法,也就是通过展开组合数定义然后进行约分来减少计算量:以Cni(8,3)为例,按定义式展开如下,对于(5,8]区间的数,分子上出现一次而分母上没出现;(3,5]区间的数在分子、分母上各出现一次;[1,3]区间的数分子上出现一次而分母上出现两次。如下图所示:
除了缺少参数正确性的外围检查代码,该问题最大的问题有两处:1)实数计算会引入误差;2)循环结构中的n-j和minNI-j都是从大到小变化,会出现除不尽的情况,从而引入误差。这两种误差的积累越来越大,最终会导致错误结果。
参考代码:
获奖名单:估计是这次题目难度偏大了,严格来说,所有留言中没有完整答案,但是一本也不送的话又不太好意思,只好选一个最接近的了。下面这位朋友请于明天中午12点之前通过公众号后台把详细邮寄地址和电话发送给我,以便邮寄赠书。