Найти максимум числа
Доброе утро, задание было в том что нужно ввести первое число которое >0, потом начать вводить следующие числа и оборвать вводить когда введено число меньше 0. И вот нужно вывести максимальное число из всех введённых по формуле (an+n), т.е если на 4-м было введено число 3, а первым число 5, то максимальным будет 3+4, а не 5+1. Ну я такой сделал программу считает. А препод говорит:"хрень переделывай без списков", вот только я не понимаю как ёё без списков организовать
spisok = []
a = int(input('-->> '))
while True:
if a>=0:
spisok.append(a)
a = int(input('-->> '))
else:
break
k = 1
mx = 0
for i in spisok:
if i < 0:
break
s = i + k
if s > mx:
mx = s
k += 1
print(mx)
Ответы (2 шт):
попробуйте так:
max1, index = 0, 1
while True:
num = int(input())
if num < 0:
break
if num + index > max1:
max1 = index + num
index += 1
print(max1)
Если c использованием списков, то решение в 1 строчку:
seq = [10, 2, 5, 8, 3, 1, 5] # список значений накопили через while и input
res = sorted([obj for obj in enumerate(seq)], key=lambda i: i[0] + i[1])[-1:]
print(f"value: {res[0][1]}, pos: {res[0][0] + 1}")
Если без использования списков
max_value, max_pos = 0, 0
pos = 1
while True:
value = int(input())
if value < 0:
break
(max_value, max_pos) = (value, pos) if pos + value > max_value else (max_value, max_pos)
pos += 1
print(f"value: {max_value}, pos: {max_pos}")
Во втором варианте можно 2 строчки запихнуть в 1 - не очень наглядно конечно, но в 1 строчку :)))
(max_value, max_pos, pos) = (value, pos, pos + 1) if pos + value > max_value else (max_value, max_pos, pos + 1)
В итоге наверное самый компактный вариант:
value, pos = 0, 0
max_value, max_pos = 0, 0
while value >= 0:
value, pos = int(input()), pos + 1
if value >= 0:
max_value, max_pos = (value, pos) if pos + value > max_value else (max_value, max_pos)
print(max_value, max_pos)