LINUX.ORG.RU

Scheme: второе по максимальности число за одно действие?


0

0

Scheme:

(define (max a b)
  (if (> a b) a b))

(define (min a b)
  (if (< a b) a b))

Как за одно действие, используя *только* вышеприведенные
функции вычислить второе по максимальности число из трех
данных чисел: a b c? Другие операции и возможности языка
использовать нельзя.

Насколько я понимаю, вариант min(a, max(b, c)) здесь
не катит, ибо он не во всех случаях будет возвращать
правильное значение.

anonymous

Что значит "одно действие"? min(a, max(b, c)) -- здесь 2 действия.

rab_boziy
()
Ответ на: комментарий от slackophile

> Что значит "одно действие"? min(a, max(b, c)) -- здесь 2 действия.

ok, в одно выражение.

> min (max a b) (max b c))

Не катит, ибо вариант, когда b > a && b > c вернет здесь b.

anonymous
()
Ответ на: комментарий от anonymous

> Не катит, ибо вариант, когда b > a && b > c вернет здесь b.

Да, я уже заметил.

slackophile
()
Ответ на: комментарий от slackophile

> Не будет работать при a == c && a > b.

А, здесь b ожидается что ли. Тогда варианта кроме кучи развесистых if-ов я не вижу.

Кстати условие про одно действие лучше уточнить. А то любая программа на Scheme может записываться в одно действие.

Legioner ★★★★★
()
Ответ на: комментарий от slackophile

>Не будет работать при a == c && a > b.

В этой ситуации имеем a (=c), то есть, как и сказано в условии, второе по максимальности.

Davidov ★★★★
()

Прогнать (a;b;c) через трассирующий алгоритм сортировки. Это в особенности должно быть просто в лиспе.

pierre
()
Ответ на: комментарий от Davidov

Видимо считается, что a и c одновременно первые по максимальности, а b второе.

Legioner ★★★★★
()
Ответ на: комментарий от slackophile

>ИМХО, второе по максимальности из ряда (3, 2, 3) будет 2.

Ну а теперь подставим:

(min (max a b) (min (max b c) (max a c))

(min (max 2 3) (min (max 3 2) (max 2 2))

(min 3 (min 3 2))

(min 3 2)

2

Davidov ★★★★
()
Ответ на: комментарий от Davidov

> Не будет работать при a == c && a > b.

> Но условие надо уточнить, anyway.

В данном случае неважно про a == c. Все работает так, как хотел. Спасибо всем за помощь!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.