Предмет: Информатика, автор: katyavladova16012019

Опишите, пожалуйста, что делается в каждой строке


def Merge(mass, p, q, r):
left = mass[p : q + 1]
right = mass[q + 1 : r + 1]
i, j, k = 0, 0, p
while i < len(left) and j < len(right):
if left[i] < right[j]:
mass[k] = left[i]
i += 1
else:
mass[k] = right[j]
j += 1
k += 1
while i < len(left):
mass[k] = left[i]
i += 1
k += 1
while j < len(right):
mass[k] = right[j]
j += 1
k += 1

Ответы

Автор ответа: timetraveler
1

Привет питонистам!

# - значок комментария, я использовала его, чтобы, если что, была возможность запустить код и свериться со всем в процессе

Вроде, примерно я всё описала, но если что-то не до конца понятно, можешь спрашивать!! Код действительно не самый тривиальный, но, вроде, это одна из реализаций merge sort или сортировки слиянием

Насколько я понимаю, в результате вызова этой подпрограммы мы проходимся по части массива (с элемента под номером p и до последнего) и при этом постоянно сравниваем элементы из двух частей от этой части массива - левой и правой. Таким образом, если у нас mass = {6, 3, 5, 1, 2, 7}, p = 0, q = 2, r = 5

Получаем left = {6, 3, 5}, right = {1, 2, 7}

И, проходясь по циклу while, получаем следующие значения:

1-ая итерация цикла: 6 > 1 => mass = {1, 3, 5, 1, 2, 7}

2-ая: 6 > 2 => mass = {1, 2, 5, 1, 2, 7}

3-я: 6 < 7 => mass = {1, 2, 6, 1, 2, 7}

4-я: 3 < 7 => mass = {1, 2, 6, 3, 2, 7}

5-я: 5 < 7 => mass = {1, 2, 6, 3, 5, 7}

Затем наш цикл заканчивается, так как просмотрены все элементы массива left, но, так как мы не поставили на место последний элемент массива right, запустится самый нижний цикл. Нам повезло и семёрка уже стоит на своём месте, но программа перепишет её ещё раз

Итог первого прохода программы: mass = {1, 2, 6, 3, 5, 7}

Как мы видим, произошла частичная сортировка, но, чтобы полностью отсортировать массив, требуется больше одного подхода и сходу весь алгоритм я написать не смогу - если это нужно, напиши и я попробую разобраться через какое-то время

# def - слово, говорящее нам о том, что перед нами подпрограмма/функция

# Атрибуты:

# mass - некоторый массив чисел

# p, q, r - некоторые значения. Имеет смысл вводить такие, что p <= q < r

def Merge(mass, p, q, r):

# Вводим массив left: это новый массив, включающий в себя с p-ого по (q+1)-ый элементы массива mass

left = mass[p : q + 1]

# Вводим массив right: это новый массив, включающий в себя с (q+1)-ого по (r+1)-ый элементы массива mass

right = mass[q + 1 : r + 1]

# i, j, k - традиционные наименования переменных циклов

i, j, k = 0, 0, p

# len() - функция для подсчёта количества элементов в массиве

# Соответственно, цикл выполняется до тех пор, пока не будут просмотрены все элементы в массиве left или все - в массиве right

while i < len(left) and j < len(right):

 # Вначале мы проверяем, больше ли i-ый элемент массива left j-ого в массиве right

 if left[i] < right[j]:

  # Если да, заменяем k-ый элемент массива i-ым элементом массива left

  mass[k] = left[i]

  # И прибавляем к i единицу, чтобы сдвинуть цикл

  i += 1

 else:

  # Если нет, заменяем k-ый элемент массива j-ым элементом массива right

  mass[k] = right[j]

  # И сдвигаем j на единицу

  j += 1

 # После этого, вне зависсимости от результата условия, сдвигаем k

 k += 1

# Затем, так как есть шанс, что элементы в каком-то из массивов не просмотрены до конца, проверяем массивы

# Если программа не прошлась до конца массива left, она перекладывает все элементы из него в массив mass

while i < len(left):

 mass[k] = left[i]

 i += 1

 k += 1

# Если программа не прошлась до конца массива right, она перекладывает все элементы из него в массив mass

while j < len(right):

 mass[k] = right[j]

 j += 1

 k += 1


katyavladova16012019: Спасибо большое ☺️
timetraveler: Не за что!! Надеюсь, всё понятно, если нет - меня можно спрашивать о чём угодно (хочу научиться объяснять задачки по программированию)
katyavladova16012019: Здравствуйте, не моноиды вы объяснить, пожалуйста, что происходит в каждой строчке кода ?

def keyCount(n, actualClicks, maxClicks):
clickCount = [0] * n
for click in actualClicks:
clickCount[click - 1] += 1
for i in range(n):
if maxClicks[i] < clickCount[i]:
print('YES')
else:
print('NO')


n = int(input())
maxClicks = [int(i) for i in input().split()]
k = int(input())
actualClicks = [int(i) for i in input().split()]

keyCount(n, actualClicks, maxClicks)
katyavladova16012019: Б Задача №111167. Клавиатура
На региональном этапе Всероссийской олимпиады школьников по информатике в 2009 году предлагалась следующая задача.

Всем известно, что со временем клавиатура изнашивается,и клавиши на ней начинают залипать. Конечно, некоторое время такую клавиатуру еще можно использовать, но для нажатий клавиш приходиться использовать большую силу.
katyavladova16012019: При изготовлении клавиатуры изначально для каждой клавиши задается количество нажатий,которое она должна выдерживать. Если знать эти величины для используемой клавиатуры,то для определенной последовательности нажатых клавиш можно определить,какие клавиши в процессе их использования сломаются, а какие — нет.
katyavladova16012019: Требуется написать программу, определяющую, какие клавиши сломаются в процессе заданного варианта эксплуатации клавиатуры.
katyavladova16012019: Входные данные
Первая строка входных данных содержит целое число
n
(1≤≤1000
1

n

1000
) —количество клавиш на клавиатуре. Вторая строка содержит
n
целых чисел —с1
с
1
, с2
с
2
, … , с
с
n
, где с
с
i
(1≤≤100000
1

c
i

100000
) — количество нажатий,выдерживаемых
i
-ой клавишей. Третья строка содержит целое число
k
(1≤≤100000
1

k

100000
) — общее количество нажатий клавиш, и последняя строка содержит
k
целых чисел
p
j
(1≤≤
1

p
j

n
) — последовательность нажатых клавиш.
katyavladova16012019: Выходные данные
Программа должна вывести n строк, содержащих информацию об исправности клавиш.Если
i
-я клавиша сломалась, то
i
-ая строка должна содержать слово YES,если же клавиша работоспособна — слово NO.

Примеры
входные данные
5
1 50 3 4 3
16
1 2 3 4 5 1 3 3 4 5 5 5 5 5 4 5
выходные данные
YES
NO
NO
NO
YES
katyavladova16012019: Вот условие к ней
Похожие вопросы
Предмет: Қазақ тiлi, автор: сабак2