JuniorКодЧастоЕщё не отвечали
Вернуть медиану трёх целых без сортировки
Реализуйте median3(a, b, c), возвращающий среднее по величине из трёх целых.
Требования:
- Используйте сравнения, а не
sorted(...). - Обработайте случай, когда часть или все значения равны.
def median3(a, b, c):
# ваш код здесь
Допишите реализацию.
Медиана — значение, не равное одновременно максимуму и минимуму. Чистый приём: a + b + c - max(a, b, c) - min(a, b, c). На сравнениях медиана — та, что лежит между двумя другими, например if (a <= b <= c) or (c <= b <= a): return b, и так далее. Равные значения обрабатываются, ведь <= сохраняет совпадения корректными.
- ✗Безусловно возвращать
b, игнорируя, что медианой может быть любой аргумент - ✗Забывать случаи равенства вроде
a == b == cили двух равных входов - ✗Путать медиану (среднее по величине) со средним арифметическим
- →Почему
sum - max - minверно даёт медиану ровно трёх значений? - →Какие тестовые входы поймают решение, неверно обрабатывающее равные значения?
Оглавление
Задача
Реализуйте median3: верните среднее по величине из трёх целых, используя сравнения, с учётом равных значений.
Решение
def median3(a, b, c):
return a + b + c - max(a, b, c) - min(a, b, c)
# Эквивалент на сравнениях:
def median3_cmp(a, b, c):
if (a <= b <= c) or (c <= b <= a):
return b
if (b <= a <= c) or (c <= a <= b):
return a
return c
Ключевые моменты
- Сумма минус максимум и минимум оставляет ровно среднее значение — работает и при равенствах.
- На сравнениях
<=сохраняет корректность при совпадениях (a == b == c). - Медиана — это среднее по величине, не среднее арифметическое.
Оглавление