蓝桥杯每日一练——小明跳房子 python

小明和同学们玩跳房子的游戏,现给出一排房子,请计算出小明最少需要跳几次就可戏,完成游戏时哪只脚落地?(0代表左脚,1代表右脚)

游戏规则1:地上画有n个正方形依次排开代表房子,每个房子里标有数字,数字代表最多可以跳几个房子,数字不能为0(如:数字为2,可以直接向前跳1个房子,也可以直接向前跳2个房子)。

例如:
地上画有5个正方形代表房子,房子里面的数字分别为2,1,4,2,1。
小明在第一个房子是可以选择跳到第2个房子或者第3个房子,为了所跳次数最少选择跳到第3个房子(房子数字为4);房间数字为4,可以选择跳到第4个房子或者第5个房子,为了所跳次数最少选择跳到第5个房子。故至少需要跳两次就可以完成游戏。
游戏规则2:只能单脚落地,左脚起跳右脚落地,右脚起跳左脚落地;第一次起跳为左脚
例如:
小明一共跳两次,第一次左脚起跳,右脚落地;第二次右脚起跳,左脚落地;完成游戏时左脚落地

输入描述
第一行输入n个正整数,正整数之间用英文逗号隔开

输出描述
输出两个整数,整数之间用英文逗号隔开;第一个整数表示最少跳的次数,第二个整数表示落地的脚(0代表左脚,1代表右脚)

这道题原题来自>悦儿姐的博文
我感觉她的算法还不够完美,不能得到正确答案,所以进行了一些小修改

思路
原博文谈到,左右脚的落地可以通过计数器的奇偶性来判断,这也很大程度给了我启发!
我的算法采用倒推的方式:
例如:
2 9 1 1 1 1 1 1 1 1 => 1 1 1 1 1 1 1 1 9 2
i = 0,找到能够走到 i 处的最远的那个格子,也就是 9 ,然后再循环这个操作,直到走完。
例如:
4 4 6 1 5 1 5 6 1 2 7 8 1 2 6 11 5 => 5 11 6 2 1 8 7 2 1 6 5 1 5 1 6 4 4
i = 0,找到能够走到 i 处的最远的那个格子,也就是 7 ,再循环操作,接下来就是 5 ,然后是 6 ,最后就是第一格4。
这道题的数字其实不是越大越好,而是越巧越好,一样可以走到 i 的,走的格子越多越好!

lists = list(map(int, input().strip().split(',')))[::-1]   # 接收,顺便翻转
i = 0
count = 0
guochen = []     # 方便查看跳房子的过程
while i != len(lists) - 1:
    y = i
    for j in range(i + 1, len(lists)):
        if lists[j] >= j - i:
            y = j
    count += 1
    i = y
    guochen.append(lists[i])
# print(guochen[::-1])  # 查看过程
print(count, 0 if count % 2 == 0 else 1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值