鱼C论坛

 找回密码
 立即注册
查看: 711|回复: 6

[已解决]老鼠打洞

[复制链接]
发表于 2020-4-7 15:46:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助这个不使用幂运算应该怎么做呢,对两只老鼠没有打完一天的量就碰面的情况有点没有思路
最佳答案
2020-4-7 16:13:59
width=int(input('输入厚度值:'))
br,sr=1,1
sbr,ssr=0,0
dist,tmp=0,0
day=0
while True:
    if dist >= width:
        print('需要%d天相遇'%day)
        bd = sbr-br/2 #相遇前一天大老鼠走的距离
        sd = ssr-sr*2 #相遇前一天小老鼠走的距离
        br_dist=bd+br/((4*sr)+br)*(width - tmp) # 相遇当天大鼠行进距离
        sr_dist=sd+4*sr/((4*sr)+br)*(width - tmp) #相遇当天小鼠行进距离
        print('大鼠行进距离为%.1f,小鼠行进距离为%.1f'%(br_dist,sr_dist))
        break
    tmp = dist  # 记录上轮循环打了的距离
    # 本轮进展:
    sbr += br # 大老鼠行进距离
    ssr += sr # 小老鼠行进距离
    dist = sbr+ssr  # 本轮结束后打的距离
    br,sr =br*2,sr/2 # 下一轮可以打的距离
    day += 1
QQ截图20200406235254.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-7 15:51:37 | 显示全部楼层
递归。
学习汉诺塔那一节就可以做了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:13:59 | 显示全部楼层    本楼为最佳答案   
width=int(input('输入厚度值:'))
br,sr=1,1
sbr,ssr=0,0
dist,tmp=0,0
day=0
while True:
    if dist >= width:
        print('需要%d天相遇'%day)
        bd = sbr-br/2 #相遇前一天大老鼠走的距离
        sd = ssr-sr*2 #相遇前一天小老鼠走的距离
        br_dist=bd+br/((4*sr)+br)*(width - tmp) # 相遇当天大鼠行进距离
        sr_dist=sd+4*sr/((4*sr)+br)*(width - tmp) #相遇当天小鼠行进距离
        print('大鼠行进距离为%.1f,小鼠行进距离为%.1f'%(br_dist,sr_dist))
        break
    tmp = dist  # 记录上轮循环打了的距离
    # 本轮进展:
    sbr += br # 大老鼠行进距离
    ssr += sr # 小老鼠行进距离
    dist = sbr+ssr  # 本轮结束后打的距离
    br,sr =br*2,sr/2 # 下一轮可以打的距离
    day += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:35:08 | 显示全部楼层
汉诺塔
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:40:18 From FishC Mobile | 显示全部楼层
dlnb526 发表于 2020-4-7 15:51
递归。
学习汉诺塔那一节就可以做了

这东西,最终结果能是整数吗,精确到时?分?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 17:10:31 | 显示全部楼层
wp231957 发表于 2020-4-7 16:40
这东西,最终结果能是整数吗,精确到时?分?

输出格式里说了天数是整数(应该是向上取整)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 17:25:11 | 显示全部楼层
import datetime
length=int(input("请输入墙的厚度:"))
o_mouse,o_len=1,0
y_mouse,y_len=1,0
days=0
while True:
    days+=1
    if length>(o_mouse+y_mouse): #完整打一天没打穿
        o_len+=o_mouse
        y_len+=y_mouse
    else:                        #最后一天,没打够一整天就打穿了
        o_len+=o_mouse*length/(o_mouse+y_mouse)
        y_len+=y_mouse*length/(o_mouse+y_mouse)
        break
    length-=(o_mouse+y_mouse)
    o_mouse*=2
    y_mouse/=2
print("天数:%d"%days)
print("old=%f,young=%f"%(o_len,y_len))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 02:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表