27 задание на егэ(№5258 на решу егэ).Дан спи­сок точек плос­ко­сти с це­ло­чис­лен­ны­ми ко­ор­ди­на­та­ми. Не­об­хо­ди­мо опре­де­лить: 1) номер ко­ор­ди­нат­ной чет­вер­ти K, в ко­то­рой на­хо­дит­ся боль­ше всего точек;2) ко­ли­че­ство точек в этой чет­вер­ти M;3) точку A в этой чет­вер­ти, на­и­ме­нее удалённую от осей ко­ор­ди­нат;3) рас­сто­я­ние R от этой точки до бли­жай­шей оси.Если в не­сколь­ких чет­вер­тях рас­по­ло­же­но оди­на­ко­вое ко­ли­че­ство точек, сле­ду­ет вы­брать ту чет­верть, в ко­то­рой ве­ли­чи­на R мень­ше. При ра­вен­стве и ко­ли­че­ства точек, и ве­ли­чи­ны R не­об­хо­ди­мо вы­брать чет­верть с мень­шим но­ме­ром K. Если в вы­бран­ной чет­вер­ти не­сколь­ко точек на­хо­дят­ся на оди­на­ко­вом ми­ни­маль­ном рас­сто­я­нии от осей ко­ор­ди­нат, нужно вы­брать первую по спис­ку. Точки, хотя бы одна из ко­ор­ди­нат ко­то­рых равна нулю, счи­та­ют­ся не при­над­ле­жа­щи­ми ни одной чет­вер­ти и не рас­смат­ри­ва­ют­ся.Опи­са­ние вход­ных дан­ныхВ пер­вой стро­ке вво­дит­ся одно целое по­ло­жи­тель­ное число - ко­ли­че­ство точек N.Каж­дая из сле­ду­ю­щих N строк со­дер­жит ко­ор­ди­на­ты оче­ред­ной точки - два целых числа (пер­вое — ко­ор­ди­на­та x, вто­рое — ко­ор­ди­на­та у). Опи­са­ние вы­ход­ных дан­ныхПро­грам­ма долж­на вы­ве­сти номер вы­бран­ной чет­вер­ти K, ко­ли­че­ство точек в ней M, ко­ор­ди­на­ты вы­бран­ной точки A и ми­ни­маль­ное рас­сто­я­ние R по об­раз­цу, при­ведённому ниже в при­ме­ре.Является ли мое решение на питоне эффективным и есть ли какое-нибудь более простое решение?Собственно программа:n = int(input())coord_1 = {'m': 0, 'a': (0, 0), 'r': 100}coord_2 = {'m': 0, 'a': (0, 0), 'r': 100}coord_3 = {'m': 0, 'a': (0, 0), 'r': 100}coord_4 = {'m': 0, 'a': (0, 0), 'r': 100}coords = [coord_1, coord_2, coord_3, coord_4]for i in range(n): coord = input() x, y = [int(i) for i in coord.split()] if x > 0 and y > 0: coord_1['m'] += 1 if x < coord_1['r'] or y < coord_1['r']: coord_1['r'] = min(x, y) coord_1['a'] = (x, y) elif x == coord_1['r'] or y == coord_1['r']: if x + y < coord_1['a'][0] + coord_1['a'][1]: coord_1['a'] = (x, y) elif x < 0 and y > 0: coord_2['m'] += 1 if abs(x) < coord_2['r'] or y < coord_2['r']: coord_2['r'] = min(abs(x), y) coord_2['a'] = (x, y) elif abs(x) == coord_2['r'] or y == coord_2['r']: if abs(x) + abs(y) < abs(coord_2['a'][0]) + coord_2['a'][1]: coord_2['a'] = (x, y) elif x < 0 and y < 0: coord_3['m'] += 1 if abs(x) < coord_3['r'] or abs(y) < coord_3['r']: coord_3['r'] = min(abs(x), abs(y)) coord_3['a'] = (x, y) elif abs(x) == coord_3['r'] or abs(y) == coord_3['r']: if abs(x) + abs(y) < abs(coord_3['a'][0]) + abs(coord_3['a'][1]): coord_3['a'] = (x, y) elif x > 0 and y < 0: coord_4['m'] += 1 if x < coord_4['r'] or abs(y) < coord_4['r']: coord_4['r'] = min(x, abs(y)) coord_4['a'] = (x, y) elif x == coord_4['r'] or abs(y) == coord_4['r']: if abs(x) + abs(y) < coord_4['a'][0] + abs(coord_4['a'][1]): coord_4['a'] = (x, y)k = 1; m = coord_1['m']r = coord_1['r']; a = coord_1['a']for i in range(1, 4): if m < coords[i]['m'] or (m == coords[i]['m'] and r > coords[i]['r']): k = i + 1; r = coords[i]['r']; a = coords[i]['a'] m = coords[i]['m']print('K =', k)print('M =', m)print('A =', a)print('R =', r)

12 Авг 2019 в 19:44
815 +1
0
Ответы
1

Определяя координатные четверти и заполняя словари coord_1, coord_2, coord_3 и coord_4, ваше решение выглядит эффективным.

Для улучшения читаемости и возможной дальнейшей расширяемости кода, вы можете рассмотреть использование цикла для итерации по словарям coord_1, coord_2, coord_3 и coord_4.

Кроме того, можно упростить значения r, a и m при выборе четверти, обращаясь к словарю точки с индексом переменной k. Это может упростить решение и избежать дублирования кода.

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

20 Апр в 14:55
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир