Уведомления

Группа в Telegram: присоединиться

#1 Окт. 24, 2017 15:22:04

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

Помогите найти ошибук

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

Выведите два значения.
Тест 1
Входные данные:
1 2 1 2 1

Вывод программы:
2 3



Тест 2
Входные данные:
1 2 3 4 5

Вывод программы:
5 4



Тест 3
Входные данные:
5 4 3 2 1

Вывод программы:
5 0

 aList = input().split()
n = max(aList)
if int(n) >= 0:
    print(n, len(aList) - aList[::-1].index(n) - 1)
else:
    n = min(aList)
    print(n, len(aList) - aList[::-1].index(n) - 1)

Код не проходит последние 2 теста, не могу понять в чем ошибка (данные теста не видны)

Офлайн

#2 Окт. 24, 2017 15:40:49

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

Помогите найти ошибук

Надо сделать две переменные - <значение максимального> и <последний индекс максимального> - и перебирать элементы списка по очереди, обновляя эти переменные, если это нужно. К концу перебора элементов списка эти переменные будут заполнены правильными значениями.

LanaBond
Код не проходит последние 2 теста
Он вообще неправильный. Метод .index() - это дополнительный проход по списку. Срез создаёт новый список, выделяя для него место в памяти. И вычисление длины списка тоже может делать дополнительный проход, если размер списка не хранится внутри списка (а это может быть в какой-нибудь реализации питона).



Отредактировано py.user.next (Окт. 24, 2017 15:45:04)

Офлайн

#3 Окт. 24, 2017 20:07:55

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 550
Репутация: +  63  -
Профиль   Отправить e-mail  

Помогите найти ошибук

LanaBond
не могу понять в чем ошибка
начнем понимать
aList = input().split() тут вы получаете список СТРОК из цифр (заметьте разницу между строкой и числом)
n = max(aList) находите максимальный (орфографически) элемент благо в списке строки из одной цифры и все прокатит ровно но если у вас будет такой список ( а у вас именно список из строк)
 >>> a = ['223','586','1322','9']
>>> print(min(a))
1322
>>> print(max(a))
9
думаю тут ошибка видна явно
if int(n) >= 0: ну если n не ноль то всегда будет выполнятся это условие ( а 0 в входных данных я не вижу)
print(n, len(aList) - aList.index(n) - 1) тут вообще темный лес я даже не понял что и для чего ну ладно n 'это ваш макс элемент ну для чего len(aList) - aList.index(n) - 1?
 a = list(map(int,input().split()))
index = 0
value = a[0]
for ind, val in enumerate(a):
    if val > value or val == value:
        index, value = ind, val
print(value,index)

Офлайн

#4 Янв. 12, 2020 17:58:52

breakz849
Зарегистрирован: 2020-01-12
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите найти ошибук

marvellik
Большое спасибо! Вы мне очень помогли.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version