首页 > 试题广场 >

数组移动跳跃

[编程题]数组移动跳跃
  • 热度指数:5327 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个非空的整数数组,从数组第一个元素(下标为0的元素)开始遍历进行移动,下一次向后或向前移动 该元素的值 的位数(值为正数向后移动,值为负数向前移动,值为零不移动),依次类推进行移动,若某次移动数组出现越界,则说明数组可以跳出,返回true;不能跳出则返回false;(加分项:也可考虑不增加使用其他集合数组辅助完成算法)
例1:
输入数组a[5] = [1,2,3,2,5];从第一个元素开始a[0]=1,下次向后移动1位到第二个元素a[1]=2,再次向后移动2位到第四个元素a[3],因为下次向后移动2位(a[3]=2)后,向后数组越界,即跳出数组,输出true;
例2:
输入数组a[2] = [1,-3];从第一个元素开始a[0]=1,下次移动1位到第二个元素a[1]=-3,再次向前移动3位后,向前数组越界,即跳出数组,输出true;



输入描述:
一个非空的整数数组(至少有一个元素,可正可负)


输出描述:
按规则移动后是否能跳出数组
示例1

输入

[1]

输出

true
示例2

输入

[2,1,3,5]

输出

true
示例3

输入

[2,1,-3]

输出

true
示例4

输入

[1,1,1,2,-1,1,-3]

输出

false
def out_of(data):  #用visit数组记录已访问过的下标
    index, step = 0, data[0]
    visit = [0] * len(data)
    visit[0] = 1
    while True:
        index += step
        if index >= len(data) or index < 0:
            return True
        if visit[index]:
            return False
        step = data[index]
        visit[index] = 1

data = list(map(int, input()[1:-1].split(',')))
print('true' if out_of(data) else 'false')
发表于 2019-10-06 23:20:09 回复(0)
arr = list(map(int, input().strip()[1: -1].split(',')))

index = 0
temp = []
try:
    while index not in temp:
        temp.append(index)
        index += arr[index]
    print('false')
except IndexError:
    print('true')

发表于 2019-09-14 16:15:47 回复(0)
arr = input() if len(arr)<=4: if '0' in arr: print('false') else: print('true') else:
    numbers = list(map(str, arr.split(',')))
    numbers[0] = numbers[0][1:]
    numbers[-1] = numbers[-1][:-1]
    numbers = list(map(int, numbers))
    visited = []
    index = 0  while index>=0 and index<len(numbers): if index not in visited:
            visited.append(index)
            index+=numbers[index] continue  else: print('false') break  if index<0 or index>=len(numbers): print('true')
发表于 2019-09-02 16:15:01 回复(0)
s = input()
s = s[1:len(s)-1]
a = list(map(int,s.split(',')))
i = 0
while i < len(a) and i >= 0:
    i += a[i]
    if (i == len(a) - 1) and (i + a[i] < len(a) and i + a[i] >= 0):
        print('false')
        break
if i >= len(a) or i < 0:
    print('true')

发表于 2019-08-19 16:04:43 回复(0)
""""
考察条件判断
"""

if __name__ == "__main__":
    a = eval(input().strip())
    ans = False
    t = 0
    while True:
        if t < 0 or t >= len(a):
            ans = True
            break
        if a[t] == 0:
            ans = False
            break
        temp = t + a[t]
        a[t] = 0
        t = temp
    print("true" if ans else "false")

发表于 2019-07-12 12:51:01 回复(0)