二鼠打洞问题

文章目录


二鼠打洞问题

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

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

请编程求此题的解,要求使用循环来完成,不允许使用幂运算。

测试说明

输入格式

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

输出格式

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

示例 1

输入: 10

输出:4 1.8 8.2

示例2

输入: 2

输出:1 1 1

提示 最后一天可能不足一天便打通了

Python求解

代码如下:

c 复制代码
"""有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打洞一尺,小老鼠也是打洞一尺。
大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。计算并输出它们几天可以相逢,
相逢时各打了多少尺。
输入格式:输入1 个整数,代表墙的厚度,单位为尺
输出格式:
第一行输出1 个整数,表示相遇时所需的天数
第二行输出2 个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1 位数字。
"""
wall = int(input()) #墙壁的厚度
rat, mouse, day, time = 1, 1, 0, 1 #大鼠速度、小鼠速度、天数、当天工作时长(1表示工作一整天)
distance_of_rat, distance_of_mouse = 0, 0 #大鼠路程、小鼠的路程
while wall > 0:
    if wall-rat-mouse < 0:
        time = wall / (rat+mouse)
        break
    wall -= (rat+mouse) #剩余墙厚
    day += 1
    distance_of_rat += rat
    distance_of_mouse += mouse
    rat *= 2
    mouse /= 2
if time < 1:
    day += 1
distance_of_rat += rat*time
distance_of_mouse += mouse*time

print(day)
print(round(distance_of_mouse, 1), round(distance_of_rat, 1)) 
相关推荐
CoderYanger33 分钟前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
C++业余爱好者37 分钟前
Java 提供了8种基本数据类型及封装类型介绍
java·开发语言·python
厕所博士37 分钟前
红黑树原理前置理解—— 2-3 树
算法·2-3树·红黑树原理理解前置
萌>__<新1 小时前
力扣打卡每日一题————除自身外所有元素的乘积
数据结构·算法
AI Echoes2 小时前
构建一个LangChain RAG应用
数据库·python·langchain·prompt·agent
xu_yule2 小时前
算法基础—搜索(2)【记忆化搜索+BFS+01BFS+Floodfill]
数据结构·算法
s09071362 小时前
Xilinx FPGA使用 FIR IP 核做匹配滤波时如何减少DSP使用量
算法·fpga开发·xilinx·ip core·fir滤波
老马啸西风2 小时前
成熟企业级技术平台-10-跳板机 / 堡垒机(Bastion Host)详解
人工智能·深度学习·算法·职场和发展
子夜江寒2 小时前
逻辑回归简介
算法·机器学习·逻辑回归
软件算法开发2 小时前
基于ACO蚁群优化算法的多车辆含时间窗VRPTW问题求解matlab仿真
算法·matlab·aco·vrptw·蚁群优化·多车辆·时间窗