标签:算法
很小的时候就看到了这么一个故事。
相传古印度有一位老人,临终前留下遗嘱,把所养的19头牛分给3个儿子。大儿子分得二分之一,老二分得四分之一,小儿子分得五分之一。按印度教规,牛被视为神灵,不能被宰杀,而父亲的遗嘱须无条件遵守。按老父亲的遗嘱,大儿子分得的牛数为:19/2=9.5,二儿子分得:19/4=4.75头,小儿子分得19/5=3.8头牛。老人死后,三位儿子一筹莫展。[1]
还记得那时候是三年级,看书已知道答案,就是大家熟悉的借牛法,即:向其他的人借一头牛,加在一起共有20头,大儿子分得20/2=10头牛,二儿子分得20/4=5头牛,小儿子分得20/5=4头牛,共分得10+5+4=19头牛,将剩下的一头牛还给别人。当时刚好来了一个非常年轻,非常帅气的数学老师,一向心高气傲的我想考考这位老师的数学水平,于是将这道题问他。这位老师一节课后将我叫到了办公室,认真的给我解释怎么分牛,当时心中还是挺佩服他的。
虽然早已知道答案,但心中一直有一事不明,10头牛并不是19的二分之一,为何算是正确答案呢?直到昨天,我才明白其中的奥秘。
解释一。
注意到,1/2+1/4+1/5=19/20,也就是说,三个儿子第一次分得的牛加起来其实并不是所有牛。假设所有牛为1,则还剩下1-19/20=1/20,按照老人的遗嘱,剩下的1/20的牛也应该让大儿子分得二分之一,老二分得四分之一,小儿子分得五分之一,此时还剩下1/20-1/20*(1/2+1/4+1/5)=1/(20*20),如此不断的分下去,那么,分得的牛数情况如下:
大儿子:19*(1/2+1/2*1/20+1/2*1/(20*20)+...)=19/2*(1+1/20+1/(20*20)+...)
二儿子:19*(1/4+1/4*1/20+1/4*1/(20*20)+...)=19/4*(1+1/20+1/(20*20)+...)
小儿子:19*(1/5+1/5*1/20+1/5*1/(20*20)+...)=19/5*(1+1/20+1/(20*20)+...)
1, 1/20, 1/(20*20), ... 是一个极限等比数列,根据等比数列公式:Sn=a1*(1-qn)/(1-q),可知
1+1/20+1/(20*20)+...=1*(1-(1/20)n)/(1-1/20), n->无穷大=20/19
因此,最终的分配方案为:
大儿子:19/2*20/19=10
二儿子:19/4*20/19=5
小儿子:19/5*20/19=4
解释二。
大儿子分得二分之一,老二分得四分之一,小儿子分得五分之一,可以看成他们的分配比例。
大儿子:二儿子:小儿子=1/2:1/4:1/5=10:5:4,因此三个儿子最终获得的牛数为:
大儿子:19*10/(10+5+4)=10
二儿子:19*5/(10+5+4)=5
小儿子:19*4/(10+5+4)=4
[1] 周颖, 程序员的数学思维修炼, 清华大学出版社, P150
标签:算法
原文地址:http://blog.csdn.net/kangrydotnet/article/details/42002357