Условие
Дан список из целых чисел. Требуется найти минимум в этом списке и поменять его с нулевым элементом.
Формат входных данных
Дан список целых чисел (вводится одной строкой), все элементы через пробел.
Формат выходных данных
Выведите измененный список одной строкой, все элементы через пробел.
Python
Помогите с задачей на питоне
Нулевой элемент - это элемент с нулевым индексом?
А если минимумов несколько, тогда как?
Первый встреченный минимум можно поменять, например, так:
Алгоритм линейной сложности, трёхпроходный.
А так можно поменять все минимумы на значение нулевого элемента:
Здесь мы сначала собираем все позиции минимума в множество (reduce), а затем заменяем на этих позициях минимум на нулевой элемент (который храним отдельно, он в обработке не участвует, кроме проверки при выводе: если нулевой элемент - и есть минимум, то ничего менять не надо).
Алгоритм трёхпроходный, а асимптотика уже немного выше: линейная от количества элементов умножить на логарифм от количества вхождений минимума.
А если минимумов несколько, тогда как?
Первый встреченный минимум можно поменять, например, так:
lst = list(map(int, input().split()))
imn = min(range(len(lst)), key = lst.__getitem__)
lst[0], lst[imn] = lst[imn], lst[0]
print(' '.join(map(str, lst)))
Пример: 3 4 5 1 8 9 1 2
1 4 5 3 8 9 1 2
Видим, что первая единичка поменялась местами с тройкой, а вторая осталась на месте.Алгоритм линейной сложности, трёхпроходный.
А так можно поменять все минимумы на значение нулевого элемента:
from functools import reduce
def regmin(t, e):
limn, mn = t; i, n = e
return ({i}, n) if n < mn else (limn | {i}, mn) if n == mn else t
def repl(li, lst, e):
return (e if i in li else n for i, n in enumerate(lst))
z, *lst = map(int, input().split())
imn, mn = reduce(regmin, enumerate(lst), (set(), z))
print(mn, ' '.join(map(str, repl(imn, lst, z))))
Пример: 3 4 5 1 8 9 1 2
1 4 5 3 8 9 3 2
Видим, что обе единицы заменены на тройки.Здесь мы сначала собираем все позиции минимума в множество (reduce), а затем заменяем на этих позициях минимум на нулевой элемент (который храним отдельно, он в обработке не участвует, кроме проверки при выводе: если нулевой элемент - и есть минимум, то ничего менять не надо).
Алгоритм трёхпроходный, а асимптотика уже немного выше: линейная от количества элементов умножить на логарифм от количества вхождений минимума.
A = [int(i) for i in input().split()]
mini = min(A)
for i in range(len(A)):
if A[i] == mini: A[i] = 0
print(*A)

Похожие вопросы
- Помогите решить задачу на питон!!
- Помогите решить задачу в питоне, пожалуйста.
- Помогите решить задачу на питоне. пожалуйста.
- Помогите решить задачу на Питоне
- Помогите с задачей по питону
- Помогите с задачей на питон
- Помогите решить задачу в питоне
- Решить две задачи на питоне. Помогите пожалуйста
- Помогите, пожалуйста, с задачей на питоне!
- Помогите с 3 задачами на питон 3!!! пожалуйста!!
Условие
С клавиатуры водится два целых числа: K и N – это индексы элементов, которые нужно поменять местами в исходном списке вещественных чисел.
Если в списке нет элемента с указанным индексом, выведите на экран "Ошибка!", если оба индекса существуют в списке, то выведите исправленный список.
Формат входных данных
Вводится два целых числа, каждое в отдельной строке: K и N.
Далее вводится список вещественных чисел. Вводится одной строкой, все числа через пробел.
Формат выходных данных
Исправленный список или текст: "Ошибка!".