LOGO语言编程题 太白饮酒问题★★答案
这是一道典型的“正向递推”和“逆向递推”的问题。
问题不复杂,但是十分具有代表性。
把这一道问题搞清楚了,有助于弄清楚所有的这一类的题目。
话说:
李白无事街上走,提壶去买酒。
遇店加一倍,见花喝一斗。
五遇花和店,喝光壶中酒。
请编程求出李白壶中原来有多少酒?
李白{zh1}一次饮酒前壶中正好有1斗酒,{zh1}一次遇见店之前壶中有半斗酒。这样逆推而上,可以求出结果。
(类似的递推问题的更详细的例题及详细的叙述请参考《LOGO语言竞赛教程》P302~P330。)
程序中:I记录遇见花和店的次数,:A为壶中酒的斗数。
程序如下:
TO LIBAI
;太白饮酒问题
MAKE "PRECISION 6 ;定义计算精度为6位
MAKE "A
0
;计算酒量的累加器清零(实际上是{zh1}酒喝光的状态)
MAKE "I
0
;计算次数的累加器清零
WHILE [:I<5][MAKE "A :A+1 \
MAKE "A :A/2 \
MAKE "I :I+1] ;倒推计算
TYPE[李白壶中原来酒的升数:]PR :A
END
计算结果:
LIBAI
李白壶中原来酒的升数:0.96875
计算表明,李白壶中原有0.6875升酒。
(程序中“\”换行转接号的使用请参考
)
但是进一步研究,还能够编写程序模拟各个时段李白酒壶中酒的数量:
TO
LIBAI2
MAKE "PRECISION 6
;定义计算精度为6位
MAKE "A
0.96875
;壶中原有的酒量
PR
:A
FOR "I 1 5[TYPE :I
TYPE CHAR 32 \
MAKE "A :A*2 TYPE :A TYPE CHAR 32 \
MAKE "A :A-1 PR :A]
END
计算结果:
LIBAI2
0.96875
1
1.9375 0.9375
2
1.875 0.875
3 1.75
0.75
4 1.5
0.5
5 1
0
计算证明,到了第5轮,李白真的是喝光了全部的酒。
为方便大家查询资料,特此建立以下链接:
林老师{zx1}发表博客的链接:
林正山老师邮箱:
声明:
林正山老师发表的文章,媒体、网站或出版物未经本人许可不得转载。个人博客可以转载,转载时请注明作者姓名、文章原始出处,或以链接形式标明来源。
《LOGO语言竞赛教程》国际标准书号书号ISBN978-7-5335-3424-0,34.1万字、414页,定价22.00元,《LOGO语言竞赛习题集》国际标准书号ISBN978-7-5335-3425-7,39.6万字、481页,定价26.00元。两本书均大32开本,封面采用250克铜版纸,四色全彩印刷,内文采用60克胶版纸,黑白印刷,福建省科技出版社出版。
凡查询购买以上两本书的,请自行与福州市安泰图书城一楼源泉书店0591-87547909联系购买。为保证书款安全,建议外地读者使用“支付宝”付款。