"Логические задачи" - это познавательно-развлекательный проект для непрокисших мозгов. Задачи на логику, нестандартное мышление. Не всегда самое очевидное решение - правильное. Но иногда всё оказывается проще, чем кажется на первый взгляд.

Задачи на логику и сообразительность




О сайте
Гостевая книга
ЧаВо

Пользователи
RSS

Поиск на сайте





запомнить меня
Зарегистрироваться


Задачи



Данетки


Текущие:

  Мой любимый грех (с)
  Математика в архитектуре
  Не сыпь мне соль на рану
  «Геометрическая»
  Высказывание Ломоносова
  Наверное, не про яблоки
  Комерция
  Везде градусы
  Вагончик тронется, вагончик тронется..
  Спасибо медикам и католикам))
  Специальная купюра
  Студенческая смекалка
  Эллипс vs Круг
  Современные технологии. Немецкий стандарт.
  Спортивная
  философская
  Про газету
  печатная монета
  Купюра евро
  Древние изобретения
  Биометрические паспорта
  Новый глава
  В далеком созвездии тау Кита... 8)))
  Огородное
  Средневековое строительство
  Жестокое наказание
  Их нравы - 4
  Европейский стандарт

Разгаданные недавно:

  этот модный тандыр
  Из Что-Где-Когда
  Может ли такое быть?
  Что изображено?
  Да на тебе пахать надо!


Справочная



Признаки делимости
Площади фигур


Реклама






задача: Сравнение без сравнения для программистов

Задачу прислал: Админ


Сложность: простаяНапишите метод, находящий максимальное из двух чисел, не используя операторы if-else или любые другие операторы сравнения.



Ответ





Решение задачи





Ваши ответы на задачу


ответов: 10

KoKos 2019-05-03 01:27:03 пишет:
R-2, можно конечно. Но это слишком дорогое удовольствие по сравнению с модулем. Всегда предполагайте худшее - если кто-то попросил Вас написать метод, то собирается его вставить в самый злобный участок высоконагруженного кода, где он будет вызываться 100500 тыщ раз в секунду. Ж8)))

R-2 2019-05-03 01:12:55 пишет:
Чтобы избавиться от минуса можно использовать sqrt(a*a)

KoKos 2019-05-03 00:55:18 пишет:
Кстати, Админ, насчет фатальной ошибки имеем любопытный лайфхак:

try {
log(a-b);
return a;
} catch {
return b;
}

... Формально операторов сравнения нет. :)))
   Админ: формально да, не хуже модуля.

KoKos 2019-05-02 02:11:20 пишет:
Ваша же исходная формула накроется медным тазом (точнее фатальной ошибкой деления на ноль) при a=b

KoKos 2019-05-02 02:08:31 пишет:
Nikita, если Вам надо обязательно "хитростное" обоснование полусуммы и полуразности, то оно получается гораздо проще. Есть такая функция "сигнум". Изобретена математиками задолго до появления компьютеров, хотя в общих разделах практически не встречается. С помощью этой функции Ваше исходное выражение записывается гораздо проще уже само по себе: a*(1+sign(a-b))/2+b*(1-sign(a-b))/2 ; и далее раскрывая скобки получаем без всяких танцев с квадратами: (a+b)/2+(a-b)*sign(a-b)/2 , а памятуя, что x*sign(x)=abs(x) и получаем во втором слагаемом модуль полуразности.
   Админ: кстати, интересный путь отказаться от использования модуля, который в себе скрытую проверку содержит. Покрутить со знаковым битом и побитовыми операциями. Придется, правда, пожертвовать универсальностью и сузить задачу, конкретизируя тип переменных.

Nikita 2019-05-01 20:01:30 пишет:
Раскрывая скобки, памятуя, что |a-b|=|b-a|, a также что(a-b)^2=|a-b|^2, скрадывая квадрат разности по формуле сокращенного умножения, - в итоге приходим к [(a+b)+|a-b|]/2. Но можно и напрямую путем бесхитростных рассуждений: было уже.

Nikita 2019-05-01 19:35:10 пишет:
a*(1-[(b-a)/|b-a|+1]/2)+b*(1-[(a-b)/|a-b|+1]/2)

K2 2019-03-20 12:43:47 пишет:
ЫЫЫ... а может "раз такая пьянка" - то и вовсе написать - max(a, b)
Ибо это оператор возврата максимума, но НЕ "любой другой Сравнения" - результата сравнения мы ведь не получаем. А на всё что там под капотом - прикидываемся юзверями и говорим что нам туда лазить никак не можно :)

K2 2019-03-20 12:37:12 пишет:
= (A+B+|A-B|)/2
   Админ:

KoKos 2019-03-20 11:10:00 пишет:
:) Ну, вообще-то это задачка-неберучка. Функция модуля (abs), которая сюда просится, аж пищит, - на самом деле у себя под капотом использует операцию сравнения - это просто к гадалке не ходи. :))) Можно, конечно, ее попытаться заменить какими-нибудь «костылями», типа корня из квадрата - но, во-первых, нет гарантий, что и костыли не будут скомпрометированы скрытым сравнением, а во-вторых, это будет сильно смахивать на анекдот про вырезание аппендикса. :)))

Ну, а так, то полусумма плюс модуль полуразности, видимо являются ожидаемым ответом. :)
   Админ: да, предполагалось так

Добавьте комментарий:
Автор:

Комментарий:

Пожалуйста, введите символы с картинки:
(подтверждение не требуется для зарегистрированных пользователей)



 





Обсуждаем

  Задача Гора.:
Xuzke : [скрыто]
Гостевая книга:
не представился : В школе все казалось правильным. Из математики следует физика, из физики следует химия, из химии сле...
R-2 : Ты решил: Ну, и наконец, то решение, которое тут видимо предполагается в идеале, я не буду говори...
Так, по старой памяти заглянул :) : R-2, условие неплохо бы конкретизировать. ;)) А то так вариантов может быть масса, хотя все обладают...
Задача 4 хода:
колд : [скрыто]
Задача Кот и мышка:
Дмитрий : [скрыто]
Задача Черная Жемчужина:
mskfirst : [скрыто]
Задача Квадратный торт:
не представился : [скрыто]
Задача Задача с ведрами: 9 и 4 = 6.:
ИносОйЧанбин : [скрыто]
Дкгк7 : [скрыто]
Задача Геометрическая 3:
не представился : [скрыто]
Алексей : [скрыто]
Гостевая книга:
R-2 : Дано: листочек бумаги и ручка. На листочке написаны три нуля. О О О Задача: «как из трёх нулей...
Задача Мышки и бутылки:
Никита : [скрыто]
Задача Вписанные квадратики:
Маргарита : [скрыто]



Реклама



© 2009-201x Логические задачи