python123题目——老鼠打洞

文章介绍了一个源自《九章算术》的数学问题,涉及两只老鼠打洞的场景。问题描述了大老鼠和小老鼠每天打洞的进度规则,并要求求出它们相逢时所需天数及各自打洞的总长度。文中提供了一个解题的Python代码示例,强调了处理此类问题需要注意的细节,并鼓励多加练习以掌握解题技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型:流程控制

描述

《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?

这道题的意思就是说,有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。

(注:本题禁止使用幂运算)

输入格式

输入1个整数,代表墙的厚度,单位为尺

输出格式

第一行输出1个整数,表示相遇时所需的天数
第二行输出2个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1位数字。

示例

输入:10
输出:
4
1.8 8.2

参考答案

这题一开始写的时候有很多细节容易注意不到,多练习!感觉答案的代码很简洁,值得学习。

n = int(input())
rat, mouse, day, time = 1, 1, 0, 1
distance_of_rat, distance_of_mouse = 0, 0  # 大老鼠和小老鼠的打洞距离
while n > 0:
    if n - mouse - rat < 0:
        time = n / (mouse + rat)
    n = n - mouse - rat
    distance_of_mouse = distance_of_mouse + time * mouse
    distance_of_rat = distance_of_rat + time * rat
    rat = rat * 2
    mouse = mouse / 2
    day = day + 1
print(day)
print(round(distance_of_mouse, 1), round(distance_of_rat, 1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_62488776

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值