Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 5, 2020 08:41:31

Sanya9652
Зарегистрирован: 2020-10-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача «Количество элементов, равных максимуму»

Доброго времени суток
В качестве практики решаю задачки на питонтьютор, и попалась следующая:
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности равны ее наибольшему элементу.

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

Ссылка на задачу

 n = int(input())
x = 0 #maximum
y = 1 #schet
while n != 0:
    if x<n:
        x=n
        if y<n:
            y=1 #obnulyaet schet
    elif n == x and not x>n:
        y+=1
    n = int(input())
print(y)

Отредактировано Sanya9652 (Ноя. 5, 2020 08:42:59)

Офлайн

#2 Ноя. 5, 2020 12:25:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Задача «Количество элементов, равных максимуму»

Sanya9652
но что-то мне подсказывает, что сделал все не через то место, и он должен быть существенно короче
Он у тебя даже неправильно реализует алгоритм
  
>>> def f():
...     n = int(input())
...     x = 0 #maximum
...     y = 1 #schet
...     while n != 0:
...         if x<n:
...             x=n
...             if y<n:
...                 y=1 #obnulyaet schet
...         elif n == x and not x>n:
...             y+=1
...         n = int(input())
...     
...     print(y)
... 
>>> f()
1
1
1
2
2
0
4
>>>
Должен выдавать 2.



Отредактировано py.user.next (Ноя. 5, 2020 12:26:10)

Офлайн

#3 Ноя. 5, 2020 17:43:35

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Задача «Количество элементов, равных максимуму»

А слабо, собрать входные данные в список, отсортировать его реверсивно и, в цикле, посчитать сколько элементов равны певому элементу списка?

Офлайн

#4 Ноя. 5, 2020 23:33:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Задача «Количество элементов, равных максимуму»

Rafik
А слабо, собрать входные данные в список, отсортировать его реверсивно и, в цикле, посчитать сколько элементов равны певому элементу списка?
Сделай, конечно, так, чтобы чисто лучше питон узнать. Но это алгоритмически неправильно. Во-первых, данные нужно стараться обрабатывать так, будто они поступают бесконечно (это могут быть датчики, огромные массивы данных и тому подобное), поэтому нужно стараться не собирать данные никуда, а обрабатывать их на лету, иначе не хватит памяти и время выполнения будет удлинняться. Во-вторых, ты предложил отсортировать все данные, хотя в них может быть, например, миллиард единиц и двоек и одно число сто. Зачем сортировать этот миллиард элементов? Достаточно число сто получить через линейную функцию max(), а потом считать его количество такой же линейной функцией. При этом миллиард единиц и двоек остаются нетронутыми на своих местах и, соответственно, на них не тратится время на сравнения и перемещения.

У него же алгоритм верный - обработка идёт на лету, - но он его не смог точно реализовать и написал код с ошибкой. Единственное что, он не должен читать из входного потока, а должен брать элементы из итератора, а итератор уже прикрепляется к входному потоку ввода. Так итератор можно прикреплять не только к входному потоку ввода, но и к сетевому сокету, к файлу, к любому генератору данных.



Отредактировано py.user.next (Ноя. 5, 2020 23:35:03)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version