Форум » Обработка числовых последовательностей » №23. Материал с вашего сайта. Python » Ответить

№23. Материал с вашего сайта. Python

Cheshiree: Условие: [more] После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. По положению об экзамене каждый район сам определяет, за какой балл нужно поставить какую оценку. Районный методист решила, что оценку «отлично» должны получить 20% участников (целое число, с отбрасыванием дробной части). Для этого она должна определить, какой балл должен был набрать ученик, чтобы получить «отлично». Если невозможно определить такой балл, чтобы «отлично» получили ровно 20% участников, «отлично» должно получить меньше участников, чем 20%. Если таких участников не окажется (наибольший балл набрали больше 20% участников) — эти и только эти ученики должны получить «отлично». Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран наименьший балл, который набрали участники, получившие «отлично». Известно, что информатику сдавало больше 5-ти учеников. Также известно, что есть такое количество баллов, которое не получил ни один участник. На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате: <Фамилия> <Имя> <Номер школы> <Количество баллов> где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более, чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, всего по три пробела в каждой строке). Пример входной строки: Иванов Иван 50 87 Пример выходных данных: 78 [/more] [pre2] n = int(input()) a = [] for i in range(n): a.append(int(input().split()[3])) a.sort(reverse = True) dv = n//5 # Выделяю 20% по кол-ву. if set(a[:dv]) == 1: # Максимум minb = max(a) elif a[dv] != a[dv-1]: # все 20% minb = a[dv] else: minb = min(set(a[:dv]).remove(a[dv])) # С вырезом print (minb) [/pre2] Можете оценить задачу и подсказать что-нибудь по исправлению моего решения? Подозреваю, что программа будет не эффективна по памяти!

Ответов - 2

Поляков: Cheshiree пишет: Можете оценить задачу и подсказать что-нибудь по исправлению моего решения? Подозреваю, что программа будет не эффективна по памяти! Для того, чтобы оценить решение, нужны критерии, которые выдают экспертам. С большой вероятностью могу сказать, что задач на символьные строки не будет, потому что языки типа Python'a дают при их решении серьезные преимущества за счет встроенных возможностей. Будут, скорее всего, задачи на обработку числовых последовательностей.

Cheshiree: Угу. Спасибо, приму к сведению.



полная версия страницы