Задача:
В комьютерной науке и дискретной математике, инверсия - это пара позиций последовательности, где элементы на этих позициях выпадают из естественного порядка. Таким образом, если мы используем порядок по возрастанию для группы чисел, то инверсия получается, когда более крупные цифры стоят перед меньшим значением в последовательности.
Проверим такой пример последовательности: (1, 2, 5, 3, 4, 7, 6) и мы можем видеть здесь три инверсии
- 5 и 3; - 5 и 4; - 7 и 6.
Вам дана последовательность уникальных чисел и вы должны подсчитать число инверсий в этой последовательности.
Входные данные: Последовательность как кортеж целых чисел.
Выходные данные: Количество инверсий.
Примеры:
count_inversion((1, 2, 5, 3, 4, 7, 6)) == 3 count_inversion((0, 1, 2, 3)) == 0
Как это используется: В этой миссии вы будете использовать чудеса вложенных циклов, конечно, если вы не используете продвинутые алгоритмы.
Предусловия:
2 < len(sequence) < 200 len(sequence) == len(set(sequence)) all(-100 < x < 100 for x in sequence)
Мое решение:
def count_inversion(sequence): i=0 rep = 0 while i<len(sequence): n = i + 1 try: if sequence[i] > sequence[n]: while sequence[i]>sequence[n]: rep += 1 n += 1 if n>=len(sequence): break except: pass i += 1 return rep
Неправильно решение при
sequence =(5,12,-85,-92,-32,-8,1,-34,-55,-74,-44,-63,84,8,65,54,71,90,-81,98,-17,82,-45,-72,37,26,91,97,64,-62,-24,-70,42,56,-67,0,-78,-87,-57,-56,67,-2,11,-16,7,13,-1,-46,-54,16,-4,-14,63,-15,-48,-66,36,46,75,85,-79,-83,-52,73,49,-3,88,-10,60,-21,-75,38,44,2,-89,-65,-96,-22,-76,-31,-58,55,58,14,-47,20,80,-60,93,62,-71,24,45,-64,94,29,-94,-36,57,-23,6,51,15,-5,-53,25,-41,-97,89,-59,66,87,-19,-38,-27,-86,-9,40,18,-93,30,-20,81,34,3,92,77,-25,-49,74,-51,17,41)
Функция возвращает 515, а должна 4181
Куда копать?
P.S Python3