Придумал сам себе задачу.
Есть лист c числовыми значениями, допустим s = [4, 0, 2, 1, 3]
Условие такое - начинаем обход с нулевой ячейки и находим там значение 2, значит следом идем в ячейку 2 и находим там 0. Зациклились. Обходим сдвигом на единицу вправо. Если и там уже были - сдвигаемся ещё на одну ячейку.
Вопроса два. Почему он в самом конце прогоняет проверку (видно по тому, что он печатает oops)? По идее же всё должно закончиться выводом последнего элемента массива.
И основной. Это задача учебная, поэтому производительность не важна, но если представить рабочую задачу, где элементов, скажем, сто тысяч, то наверное негоже гонять циклом в каждом проходе проверку, это же не лучший способ? Есть какие-то более правильные варианты решения подобных задач?
Результат исполнения:
Есть лист c числовыми значениями, допустим s = [4, 0, 2, 1, 3]
Условие такое - начинаем обход с нулевой ячейки и находим там значение 2, значит следом идем в ячейку 2 и находим там 0. Зациклились. Обходим сдвигом на единицу вправо. Если и там уже были - сдвигаемся ещё на одну ячейку.
Вопроса два. Почему он в самом конце прогоняет проверку (видно по тому, что он печатает oops)? По идее же всё должно закончиться выводом последнего элемента массива.
И основной. Это задача учебная, поэтому производительность не важна, но если представить рабочую задачу, где элементов, скажем, сто тысяч, то наверное негоже гонять циклом в каждом проходе проверку, это же не лучший способ? Есть какие-то более правильные варианты решения подобных задач?
Python:
c = 0
lst = []
for i in range(5):
lst.append(c)
x = s[c]
print ('place', c, 'value', x)
c = x
for e in range(len(lst)):
if c in lst:
print ('oops') # чтобы видеть, когда мы натыкаемся на уже обработанную ячейку
c+=1
Результат исполнения:
Код:
place 0 value 4
place 4 value 3
place 3 value 1
place 1 value 0
oops
oops
place 2 value 2
oops
oops
oops
Последнее редактирование: