Advertisement
tiom4eg

Solution3

Nov 17th, 2021 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. 3. Во входном файле заданы пары чисел. Найти k-ое по величине произведение (в порядке возрастания или убывания).
  2. # Пятая по величине площадь (сортировка от большего к меньшему)
  3. # модифицируем чтение из файла из решения прошлой задачи
  4. openfname = "input.txt" # имя входного файла
  5. k = 5
  6. ofile = open(openfname, "r")
  7. data = ofile.read().split("\n")
  8. data = list(map(lambda x: list(map(int, x.split())), data)) # теперь в контейнере data хранятся все строки из файла. однако, нам нужно каждую строку разделить на два числа. для этого используем конструкцию lambda (lambda - анонимная функция, после ключевого слова lambda объявляются параметры анонимной функции, после этого записывается последовательность операций над этими параметрами. в нашем случае, x - это строка, а возвращает наша анонимная функция пару чисел, записанных на этой строке
  9. # остается посчитать все площади
  10. result = [] # создаём пустой контейнер
  11. for i in range(len(data)): # проходимся по всему контейнеру
  12. result.append(data[i][0] * data[i][1]) # добавляем в контейнер result произведение i-ой пары чисел
  13. # теперь в result хранятся все произведения из входного файла
  14. result.sort() # метод sort() сортирует контейнер в порядке неубывания
  15. result.reverse() # так как нам нужны числа в порядке невозрастания, перевернём контейнер (последний элемент станет первым и так далее)
  16. print(result[k - 1]) # поскольку в контейнерах нумерация начинается с нуля, выводим не k-ый, а (k - 1)-ый элемент
  17. -------
  18. # Третья по величине площадь (сортировка от меньшего к большему)
  19. # модифицируем чтение из файла из решения прошлой задачи
  20. openfname = "input.txt" # имя входного файла
  21. k = 3
  22. ofile = open(openfname, "r")
  23. data = ofile.read().split("\n")
  24. data = list(map(lambda x: list(map(int, x.split())), data)) # теперь в контейнере data хранятся все строки из файла. однако, нам нужно каждую строку разделить на два числа. для этого используем конструкцию lambda (lambda - анонимная функция, после ключевого слова lambda объявляются параметры анонимной функции, после этого записывается последовательность операций над этими параметрами. в нашем случае, x - это строка, а возвращает наша анонимная функция пару чисел, записанных на этой строке
  25. # остается посчитать все площади
  26. result = [] # создаём пустой контейнер
  27. for i in range(len(data)): # проходимся по всему контейнеру
  28. result.append(data[i][0] * data[i][1]) # добавляем в контейнер result произведение i-ой пары чисел
  29. # теперь в result хранятся все произведения из входного файла
  30. result.sort() # метод sort() сортирует контейнер в порядке неубывания
  31. # так как нам нужны числа в порядке неубывания, ничего не делаем
  32. print(result[k - 1]) # поскольку в контейнерах нумерация начинается с нуля, выводим не k-ый, а (k - 1)-ый элемент
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement