Назовём инверсией пару элементов массива, в котором элемент с меньшим номером больше элемента с большим номером. Заметим, что после каждого обмена число инверсий в массиве уменьшается на 1. Тогда, посчитав число инверсий до работы программы и после, и вычтя из первого второе, мы получим число операций обмена.
Массив небольшой, и можно подсчитывать инверсии как угодно.
Var a,b,c,x:real; begin repeat writeln('Введите тип арифм. операции (1 - сложение, 2 - вычитание, 3 - умножение, 4 - деление, 0 - остановить программу'); readln(x); if x=1 then begin writeln('Введите 2 числа'); readln(a,b); c:=a+b; writeln('ответ: ',c); end; if x=2 then begin writeln('Введите 2 числа'); readln(a,b); c:=a-b; writeln('ответ: ',c); end; if x=3 then begin writeln('Введите 2 числа'); readln(a,b); c:=a*b; writeln('ответ: ',c); end; if x=4 then begin writeln('Введите 2 числа'); readln(a,b); c:=a/b; writeln('ответ: ',c); end; if x=0 then writeln('Пока!'); until x=0; end.
Массив небольшой, и можно подсчитывать инверсии как угодно.
python 3.5:
before = [13, 18, 7, 4, 10, 14, 15, 17, 2, 5, 9, 16, 11, 3, 20, 6, 19, 12, 8, 1]
after = [4, 7, 2, 5, 10, 9, 13, 11, 3, 14, 6, 15, 12, 8, 1, 16, 17, 18, 19, 20]
def countInversions(arr):
counter = 0
for i in range(len(arr) - 1):
for j in range(i + 1, len(arr)):
if arr[i] > arr[j]:
counter += 1
return counter
print(countInversions(before) - countInversions(after))
ответ: 60.