《程序员的算法趣题》-(日)增井敏克 Python解题 -- (Q15)

《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言。有兴趣的同学,可以购书阅读~

在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6)

Q15 走楼梯

    A上楼梯时, B 从同一楼梯往下走。每次不一定只走 1 级,最多可以一次跳过 3 级(即直接前进 4 级)。但无论走多少级, 1 次移动所需时间不变。两人同时开始走,求共有多少种“两人最终同时停在同一级”的情况(假设楼梯宽度足够,可以相互错开,不会撞上。另外,同时到达同一级时视为结束)。
    举个例子,有 4 级楼梯的时候,结果如表所示,共有 4 种情况(假设每级楼梯上写着 0~4 这几个数字)。

                                 

问题
    求当存在 10 级楼梯,且移动规则相同时,有多少种两人最终同时停在同一级的情况?

max_steps = 4

meet_count = 0
def walk(a_pos, b_pos):
    for a_step in range(1, max_steps+1):
        a_next_pos = a_pos+a_step
        for b_step in range(1, max_steps+1):
            b_next_pos = b_pos-b_step
            if a_next_pos == b_next_pos:
                global meet_count
                meet_count += 1
            elif a_next_pos < b_next_pos:
                walk(a_next_pos, b_next_pos)
            else:
                continue

walk(0, 10)
print("有%s种" % meet_count)

运行结果:

                 有201种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值