日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将2520个桔子分给六个儿子。分完 后父亲说:“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子?
由题意可以分析出每个兄弟最终的桔子数取决于前者和后者的取舍问题,2~6都是先获取后舍弃,唯有老大是先舍弃后获取,老大就是个切入点,仔细分析可以得出:[n6+别人给的桔子(老五给的)]·(2/3)=420
我们把老六获得老五给的桔子后的总数平均分成三份,若只留下两份则为420个桔子,所以每份是210个桔子,也就是说老六给了老大210个桔子后老大最后有420个桔子,所以老大原来有的桔子数-分给老二的桔子数=210——>n1-n1*(1/8)=210——>n1=240
所以目前关于老大的数量信息基本都转换成了已知量,本题是个循环关系问题,一个点已知了则就可以顺理推出其他所有点的信息
图中给出了老二到老六的“获得但未舍弃”与分之前的数量关系用Ni和ni表示;所以我们可以转化出ni与Ni的递归关系式ni=Ni-N(i-1)/(10-i),我们需要求出ni但是对应的Ni和N(i-1)都是未知的,则需要事先求出Ni,也很容易分析出Ni的关系式为Ni=420*(9-i)/(8-i)
下面给出Java代码的
经典算法问题——桔子分配(Java版)
最新推荐文章于 2021-10-29 23:17:06 发布