题目20 最小步骤数(标)

# 题目20 最小步骤数(标)
# 一个正整数数组 设为nums
# 最大为100个成员
# 求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数
#             3 5 9 4 2 6 8 3 5 4 3 9
# 要求:
# 1. 第一步 必须从第一元素起  且 1<=第一步步长<len/2  (len为数组长度)
# 2. 从第二步开始只能以所在成员的数字走相应的步数,不能多不能少,
#  如果目标不可达返回-1
#  只输出最小的步骤数量
# 3. 只能向数组的尾部走不能向回走
#
# 输入描述:
# 有正整数数组 空格分割
# 数组长度<100
#
# 输出描述 :
#  正整数  最小步数
#  不存在输出-1
#
#  例子:
#  输入
#      7 5 9 4 2 6 8 3 5 4 3 9
#  输出
#     2
#  第一个可选步长选择2
#  从第一个成员7开始走两步到9
#  第二步:从9经过9个成员到最后
#
#  例子:
#  输入
#   1 2 3 7 1 5 9 3 2 1
#  输出
#   -1
'''
def toend(count,li):
    if li[0]==len(li)-1:
        count+=1
        return count
    if li[0]>len(li)-1:
        return -1
    count+=1
    return toend(count,li[li[0]:])

while True:
    try:
        li = list(map(int,input().split()))
        result=100
        if len(li)== 1:
            print(0)
        else:
            if len(li)==2:
                print(1)
            else:
                for i in range(1,int((len(li)+1)/2)):
                    co = toend(1,li[i:])
                    if -1<co<result:
                        result = co
                if result==100:
                    print(-1)
                else:
                    print(result)
    except:
        break
'''

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值