Для поступления в вуз абитуриент должен предъявить результаты трех экзаменов в виде ЕГЭ, каждый из них оценивается целым числом от 0 до 100 баллов. При этом абитуриенты, набравшие менее 40 баллов (неудовлетворительную оценку) по любому экзамену из конкурса выбывают. Остальные абитуриенты участвуют в конкурсе по сумме баллов за три экзамена.
В конкурсе участвует N человек, при этом количество мест равно K. Определите проходной балл, то есть такое количество баллов, что количество участников, набравших столько или больше баллов не превосходит K, а при добавлении к ним абитуриентов, набравших наибольшее количество баллов среди непринятых абитуриентов, общее число принятых абитуриентов станет больше K.
Формат ввода
Программа получает на вход количество мест K. Далее идут строки с информацией об абитуриентах, каждая из которых состоит из имени (текстовая строка содержащая произвольное число пробелов) и трех чисел от 0 до 100, разделенных пробелами.
Используйте для ввода файл input.txt с указанием кодировки utf8.
Формат вывода
Программа должна вывести проходной балл в конкурсе. Выведенное значение должно быть минимальным баллом, который набрал абитуриент, прошедший по конкурсу.
Также возможны две ситуации, когда проходной балл не определен.
Если будут зачислены все абитуриенты, не имеющие неудовлетворительных оценок, программа должна вывести число 0.
Если количество абитуриентов, имеющих равный максимальный балл больше чем K, программа должна вывести число 1.
Используйте для вывода файл output.txt с указанием кодировки utf8.
Тест 1
Входные данные:
5
Иванов Сергей 70 70 70
Сергеев Петр 100 100 0
Петров Василий 70 60 70
Васильев Андрей 70 60 70
Андреев Денис 100 30 100
Денисов Роман 50 50 50
Романов Иван 60 70 70
Ким Чен Ир 50 50 50
Ким Ир Сен 40 40 40
Вывод программы:
200
Тест 2
Входные данные:
1
Иванов Сергей 40 40 40
Сергеев Петр 100 100 39
Вывод программы:
0
Тест 3
Входные данные:
1
Иванов Сергей 60 60 60
Сергеев Петр 100 40 40
Вывод программы:
1
Код:
f = open('input.txt', 'r', encoding='utf8')
outFile = open('output.txt', 'w', encoding='utf8')
k = f.readline()
k = int(k)
rez = []
l = f.readlines()
for i in l:
__if len(i.split()) == 6:
____n1, n2, n3, s1, s2, s3 = i.split()
__if len(i.split()) == 5:
____n1, n2, s1, s2, s3 = i.split()
__if int(s1) >= 40 and int(s2) >= 40 and int(s3) >= 40:
____sum = int(s1) + int(s2) + int(s3)
__else:
____sum = 0
__rez.append(sum)
rez.sort(reverse=True)
if rez[k] == 0:
__print(0, file=outFile)
elif rez[0] == rez[k]:
__print(1, file=outFile)
elif rez[k] == rez[k - 1]:
__print(rez[k - 2], file=outFile)
else:
__print(rez[k - 1], file=outFile)
f.close()
outFile.close()
Анализатор выдает ошибку на 11-м тесте
Python
Помогите найти ошибку в задаче по Python
Нужно предусмотреть вариант с одинаковым количеством баллов у абитуриентов с суммой, меньшей максимальной. Если количество мест 5, а суммы баллов у абитуриентов представлены списком [200 120 120 120 120 120], то выводим 200
f = open('input.txt', 'r', encoding='utf8')
outFile = open('output.txt', 'w', encoding='utf8')
k = f.readline()
# print(k)
k = int(k)
# print(k)
rez = []
l = f.readlines()
for i in l:
s1, s2, s3 = i.split()[-3:]
if int(s1) >= 40 and int(s2) >= 40 and int(s3) >= 40:
sum = int(s1) + int(s2) + int(s3)
else:
sum = 0
rez.append(sum)
rez.sort()
rez.reverse()
# print(rez)
# print(rez[k])
if rez[k] == 0:
print(0, file=outFile)
elif rez[0] == rez[k]:
print(1, file=outFile)
elif rez[k] == rez[k - 1]:
j = 1
while rez[k - j + 1] == rez[k - j]:
j += 1
print(rez[k - j], file=outFile)
else:
print(rez[k - 1], file=outFile)
f.close()
outFile.close()
f = open('input.txt', 'r', encoding='utf8')
outFile = open('output.txt', 'w', encoding='utf8')
k = f.readline()
# print(k)
k = int(k)
# print(k)
rez = []
l = f.readlines()
for i in l:
s1, s2, s3 = i.split()[-3:]
if int(s1) >= 40 and int(s2) >= 40 and int(s3) >= 40:
sum = int(s1) + int(s2) + int(s3)
else:
sum = 0
rez.append(sum)
rez.sort()
rez.reverse()
# print(rez)
# print(rez[k])
if rez[k] == 0:
print(0, file=outFile)
elif rez[0] == rez[k]:
print(1, file=outFile)
elif rez[k] == rez[k - 1]:
j = 1
while rez[k - j + 1] == rez[k - j]:
j += 1
print(rez[k - j], file=outFile)
else:
print(rez[k - 1], file=outFile)
f.close()
outFile.close()
может я что то не понимаю но если 5 мест то на них претендуют:
Иванов Сергей 70 70 70 = 210 баллов
Сергеев Петр 100 100 0 = не проходит
Петров Василий 70 60 70 = 200 баллов
Васильев Андрей 70 60 70 = 200 баллов
Андреев Денис 100 30 100 = не проходит
Денисов Роман 50 50 50 = 150 баллов
Романов Иван 60 70 70 =200 баллов
Ким Чен Ир 50 50 50 = 150 баллов
Ким Ир Сен 40 40 40 = 120 баллов
итог- в списке претендентов 7 человек по баллам (210,200,200,150,200,150,120)
сортируем по убыванию и получаем [210, 200, 200, 200, 150, 150,120]
теперь оставляем 5 человек [210, 200, 200, 200, 150] согласно количеству мест К = 5
минимальный балл в списке 150. почему ответ 200 ???
Тест 1
Входные данные:
5
Вывод программы:
200 ???
Иванов Сергей 70 70 70 = 210 баллов
Сергеев Петр 100 100 0 = не проходит
Петров Василий 70 60 70 = 200 баллов
Васильев Андрей 70 60 70 = 200 баллов
Андреев Денис 100 30 100 = не проходит
Денисов Роман 50 50 50 = 150 баллов
Романов Иван 60 70 70 =200 баллов
Ким Чен Ир 50 50 50 = 150 баллов
Ким Ир Сен 40 40 40 = 120 баллов
итог- в списке претендентов 7 человек по баллам (210,200,200,150,200,150,120)
сортируем по убыванию и получаем [210, 200, 200, 200, 150, 150,120]
теперь оставляем 5 человек [210, 200, 200, 200, 150] согласно количеству мест К = 5
минимальный балл в списке 150. почему ответ 200 ???
Тест 1
Входные данные:
5
Вывод программы:
200 ???
Dima Salomahin
Потому что 150 баллов получил и шестой, но он не проходит. Нужен гарантированный проходной балл
Иван Журавлев
набравших столько или больше баллов не превосходит K,
В 7-10 строках ты рассматриваешь только 2 случая, когда имя абитуриента состоит из 2 или 3 слов. В формате ввода сказано, что там может быть любое количество пробелов, а значит, такая строка вызовет ошибку в программе:
Ким Чен Ир Сыр 50 50 100
Чтобы избежать ошибки, читай только 3 последних слова: i.split()[-3:]
Ким Чен Ир Сыр 50 50 100
Чтобы избежать ошибки, читай только 3 последних слова: i.split()[-3:]
Похожие вопросы
- ПОМОГИТЕ НАЙТИ ОШИБКУ В КОДЕ (выводит наибольшее и наименьшее а среднее нет)
- Информатика. Питон. Помогите найти ошибку
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Решение задач по python
- Помогите пожалуйста с задачей на Python.
- Помогите пожалуйста с задачей по python!
- Задача на Python помогите
- Пожалуйста, помогите решить задачу на Python. Упражнение 124, 125, 146
- Задача по Python: Найти сумму чисел и при вводе чисел...
Можно еще написать так:
rez.sort(reverse=True) вместо
rez.reverse()