08.06李白沽酒

李白沽酒探親朋,路途迢迢有四程,
行至一程多一倍,卻被書僮喝六升,
行到親朋家裡面,半點全無在酒瓶,
借問高朋能算士,幾何原酒要分明。

設原來瓶內的酒量為x升,第一程酒量添一倍以後,就有酒2x升;“卻被書僮喝六升”後,酒量就只有(2x-6)升了。因“路途遙遠有四程”,走到朋友家時,“半點全無空酒瓶”,故可布列方程為
  {[(2x-6)×2-6]×2-6}×2- 6=0
  解這一方程,得X=5.625,
即酒瓶內原來有酒5.625升。

这道古题的大概意思是:

诗人李白买了酒去看望亲朋好友,路途很遥远分四段才能走到,每走一段路程,就在路边酒馆中按酒瓶中的酒量向酒瓶中添加一倍的酒,但是每次添加完缺被随从的小书童偷偷喝掉6升(书童的酒量也这么大?),当李白来到亲朋家里的时候,却发现酒瓶是空的,请问瓶中原来是多少酒呢?

我们先用方程式来解决这个问题:

假设原来瓶内的酒量为x升,第一程酒量添一倍以后就有酒2x升;“却被书童喝六升”后,酒量就只有(2x-6)升了。

因“路途遥远有四程”,所以每程走完都会重复上面的过程(添加剩余酒的一倍,然后书童喝掉6升),当走到朋友家时,“半点全无空酒瓶”,故可布列方程为:{[(2x-6)×2-6]×2-6}×2-6=0。

我们求解这一方程,得X=5.625,即酒瓶内原来有酒5.625升。

那么怎么用Scratch来解决这个问题呢?

首先我们用反推法来重新解决这个问题,假设时间可以倒流(就像电影回放一样),让李白从亲朋好友家中倒着走回去,让书童由喝酒6升变成加酒6升,同时添酒一倍变成减酒一半,那么最后酒瓶中剩余的酒是“0”,上一次休息“添加酒”前酒瓶中剩余的酒就是:(0+6)除以2(把偷喝的6升酒还回去,然后把添加的一倍酒拿掉),这个过程经过4次迭代,就可以算出瓶中有多少酒了。

根据这个算法,我们编写程序求解,程序如下:

“哇!这么简单?我算了好久呢”

这算啥,如果题目再难一点,小K算的会更有优势,比如现在路程变的更远了,不是4程了,是400程,也就是要添酒和偷喝酒400次了,用方程式来算算看!

!!! !!! !!!!你在耍我!!!!

但是小K用1秒时间就可以算出来:

我们设定了规则,把循环次数由4次改为400次,立刻就算出了结果。

Comments