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
840 +1
0
Ответы
1

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

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

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

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

20 Апр 2024 в 14:55
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир