python练习——老鼠打洞

题目描述

《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?
翻译即为,有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。

输入输出格式

输入:输入1个整数,代表墙的厚度,单位为尺‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
输出:第一行输出1个整数,表示相遇时所需的天数‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬。第二行输出2个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1位数字。

代码注释

n=int(input())
# 每日打洞量,所需天数
big,small,day,time=1,1,0,1
# 各自总共打洞量
distance_of_big,distance_of_small=0,0
# 洞未打完 循环
while n>0:
	# 第一天打完的情况单独考虑
    if n-big-small<0:
        time=n/(big+small)
    # 剩余洞长
    n=n-big-small
    distance_of_small=distance_of_small+small*time
    distance_of_big=distance_of_big+big*time
    big*=2
    small*=0.5
    day=day+1
print(day)
print(round(distance_of_small,1),round(distance_of_big,1))

学习笔记

round函数
round() 方法返回浮点数x的四舍五入值,语法如下:

round( x [, n]  )
  • x – 数值表达式。
  • n – 数值表达式,表示从小数点位数。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐