97 / 20 / 13
Регистрация: 27.02.2018
Сообщений: 60
1

Оптимизация кода в задаче Максимальный балл не-победителя

28.02.2018, 17:03. Показов 10752. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем код проходит на курсере,но хотелось бы узнать как сделать код быстрее в соответствии с условием задачи.


Зачет проводится отдельно в каждом классе. Победителями олимпиады становятся школьники, которые набрали наибольший балл среди всех участников в данном классе.

Для каждого класса определите максимальный балл, который набрал школьник, не ставший победителем в данном классе.


Входные данные:
Иванов Сергей 9 10
Сергеев Петр 10 20
Петров Василий 11 40
Васильев Андрей 9 11
Андреев Александр 10 15
Александров Роман 9 8
Романов Иван 11 30
Алексеев Сергей 9 11
Егоров Николай 9 12
Николаев Степан 11 30
Степанов Гаврила 10 20
Гаврилов Виктор 11 30
Викторов Павел 11 35

Вывод программы:
11 15 35


Вот и сам код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
inFile = open("input.txt", "r", encoding="utf8")
outFile = open("output.txt", "w", encoding="utf8")
reader = inFile.readlines()
cl9, cl10, cl11 = [], [], []
for i in reader:
    if i.split()[2] == "9":
        cl9.append(i.split()[3])
    elif i.split()[2] == "10":
        cl10.append(i.split()[3])
    elif i.split()[2] == "11":
        cl11.append(i.split()[3])
cl9.sort(key=int), cl10.sort(key=int), cl11.sort(key=int)   #9klass ['8', '10', '11', '11', '12']
new9, new10, new11 = 0, 0, 0                                #10klass ['15', '20', '20']
a, b, c = [], [], []                                        #11klass ['30', '30', '30', '35', '40']
for j in cl9:           #['8', '10', '11', '12']
    if new9 != j:
        a.append(j)
        new9 = j
for k in cl10:          #['15', '20']
    if new10 != k:
        b.append(k)
        new10 = k
for x in cl11:
    if new11 != x:
        c.append(x)     #['30', '35', '40']
        new11 = x
print(a[-2], b[-2], c[-2], file=outFile)
inFile.close()
outFile.close()
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2018, 17:03
Ответы с готовыми решениями:

Вычислить средний балл учеников школы, а потом максимальный средний балл из разных школ
Нужно ввести фамилию, номер школы, балл и вычислить средний балл учеников школы, а потом выразить...

В базе данных посчитать средний балл успеваемости группы. Что неправильно в задаче?
Помогите пожалуйста! Нужно в базе данных посчитать средний балл успеваемости группы..но она не...

Добавить в задаче вычисление нахождение числа студентов, имеющих средний балл больше 4
uses crt; const n=9; type student=record fio:string; predmet1,predmet2:integer;...

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона...

5
4937 / 3290 / 1140
Регистрация: 21.03.2016
Сообщений: 8,069
28.02.2018, 19:13 2
Лучший ответ Сообщение было отмечено Zarelix как решение

Решение

Zarelix,представьте что вам дано не 3 класса а 500? вы каждый класс будете писать cl9, cl10, cl11 = [], [], []?
а если вам вообще не известно сколько классов дано в файле? первое что вам нужно для оптимизации это брать все из файла
Python
1
2
3
4
5
6
7
8
9
10
classes = {}
with open("input.txt") as inFile ,open("output.txt", "w") as outFile:
    for data in inFile.readlines():
        number,ball = data.split()[-2:]
        if number in classes:   
            classes[number].append(int(ball))
        else:
            classes[number] = [int(ball)]
    res = [ str(sorted(set(classes[key]))[-2]) for key in sorted(classes,key = int)]
    outFile.write(' '.join(res))
1
97 / 20 / 13
Регистрация: 27.02.2018
Сообщений: 60
28.02.2018, 19:18  [ТС] 3
Спасибо,правда словари в курсе еще не учили. Но код разберу как буду готов теоретически.
0
4937 / 3290 / 1140
Регистрация: 21.03.2016
Сообщений: 8,069
28.02.2018, 19:33 4
Цитата Сообщение от Zarelix Посмотреть сообщение
правда словари в курсе еще не учили
так можно списками воспользоваться [[9,[тут список баллов]],[10,[тут список баллов]],[11,[тут список баллов]]] примерно такого плана
1
9 / 9 / 0
Регистрация: 15.11.2014
Сообщений: 17
09.04.2019, 04:04 5
код не совсем верный. если в классе у двух человек максимальный балл, то они оба победители. то есть нужно брать следующее меньшее число.

Добавлено через 25 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
classes = {}
inFile = open('input.txt', 'r', encoding='utf8')
for line in inFile:
    grade, mark = line.split()[-2:]
 
    if grade in classes:
        if int(mark) in classes[grade]:
            pass
        else:
            classes[grade].append(int(mark))
    else:
        classes[grade] = [int(mark)]
inFile.close()
 
for i in classes:
    print(sorted(classes[i])[-2], end=' ')
курсеру проходит на 50 процентов, есть идеи почему?
0
1 / 1 / 0
Регистрация: 14.05.2020
Сообщений: 13
04.10.2020, 11:52 6
У меня так получилось
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
marks9 = []
marks10 = []
marks11 = []
with open('input.txt', 'r', encoding='utf8') as file:
    for i in file.readlines():
        if int(i.split()[2]) == 9:
            marks9.append(int(i.split()[3]))
        elif int(i.split()[2]) == 10:
            marks10.append(int(i.split()[3]))
        else:
            marks11.append(int(i.split()[3]))
    marks9.sort(key=int, reverse=True)
    marks10.sort(key=int, reverse=True)
    marks11.sort(key=int, reverse=True)
    print(max(marks9[marks9.count(max(marks9)):]), end=' ')
    print(max(marks10[marks10.count(max(marks10)):]), end=' ')
    print(max(marks11[marks11.count(max(marks11)):]))
0
04.10.2020, 11:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2020, 11:52
Помогаю со студенческими работами здесь

Оптимизация вложенных циклов в задаче
Условия задачи звучат так: У Кролика есть три множества горшочков с мёдом: A, B и C. Все...

Максимальный средний балл
Доброго времени суток! Пишу прогу на С++,по условию необходимо вывести на экран список людей с...

Запрос на максимальный ср балл
Выполнить запрос: на выбор студентов, имеющих наибольший средний бал в своей группе. Т.е. в...

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

Максимальный балл по классам
В олимпиаде по информатике принимало участие несколько человек. Победителем олимпиады становится...

Вычислить максимальный балл
Помогите пожалуйста с задачей Известны баллы, полученные студентами за контрольную работу....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru