[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: из двух целых чисел найти большее.
MatrixGod
всем привет!

лектор задал задачку, я ломал голову но так и не придумал.

вопрос простой. надо написать функцию которая получает 2 целых числа и возвращает большее из них.

но! нельзя использовать циклы, ветвления (иф), знаки больше-меньше (<,>).

можно использовать только арифметические операторы + - * / и деление по модулю.
желательно обойтись без деления по модулю.

использовать abs() тоже нельзя так как это ветвление.

помогите плиз решить задачку. да и вам самим думаю помассировать мозги не помешает, кому это интересно.

всем заранее спасибо!



Спустя 4 минуты, 35 секунд (20.04.2012 - 12:59) Pulse написал(а):

Спустя 1 минута, 29 секунд (20.04.2012 - 13:01) Игорь_Vasinsky написал(а):
 
$a = 13;
$b = 10;

$arr = array($a, $b);

sort($arr, SORT_NUMERIC);

echo 'Число ('.$arr[0].') меньше чем число ('.$arr[1].')';

Спустя 5 минут, 23 секунды (20.04.2012 - 13:06) Гость_Michael написал(а):
laugh.gif

Спустя 27 секунд (20.04.2012 - 13:07) MatrixGod написал(а):
не не не ребята!

это должно быть не зависимо от языка программирования.
алгоритм должен работать на любом языке.
это означает что использовать готовые функции нельзя, так как в другом языке их может не быть вовсе.

повторюсь, можно использовать только арифметические операторы и деление по модулю. ВСЕ!

sort и max это ветвления.

Спустя 2 минуты, 18 секунд (20.04.2012 - 13:09) glock18 написал(а):
MatrixGod
язык то какой? если abs нельзя юзать, то max или sort тоже нельзя значит - и то, и другое цикл использует как бы.

я так понимаю, что равенство можно проверять ==? без него походу вообще нефиг делать, если без встроенных функций

UPD: первый вопрос отпал

Спустя 7 минут, 5 секунд (20.04.2012 - 13:16) MatrixGod написал(а):
glock18, язык с++.
но это не важно.
я задал вам вопрос как к программистам в общем.
а не к знатокам пхп.

лектор сказал что ответ есть и что он не такой уж и сложный.
так что он сказал что не важен язык. тоесть там не надо использовать какие-то сверх функции.

просто надо придумать алгоритм который будет работать везде.

это больше математическая задача чем о программировании.

Спустя 19 минут, 28 секунд (20.04.2012 - 13:35) rooor написал(а):
ХЗ, если как пример, то, наверное, можно так
$a = 10;
$b = 20;
$c = $a - $b;
if($c < 0)
echo $b;
else
echo $a;

Суть - от первого отнимаем второе, если результат меньше нуля - бОльшее число второе, если результат больше нуля - значит первое число больше.
Ну не знаю я кароч)))

Спустя 4 минуты, 37 секунд (20.04.2012 - 13:40) forza написал(а):
Написали же, что иф, и операторы больше, меньше нельзя использовать

Спустя 4 минуты, 17 секунд (20.04.2012 - 13:44) Michael написал(а):
отсюда:

print mmax(222, 311);
print '<br>';
print mmax(222, 111);

function mmax($a, $b){
$a1 = ($a - ($a % $b)) / $b;
$a1 = ((($a1 + 2) - (($a1 + 2) % ($a1 + 1))) / ($a1 + 1)) % 2;
$b1 = 1 - $a1;
return $a*$a1 + $b*$b1;
}

Спустя 2 минуты, 59 секунд (20.04.2012 - 13:47) MatrixGod написал(а):
эврика! получилось!

придумал с использованием корня. надеюсь прокатит )))

кому интересно:
function myMax($a, $b)
{
return ($a + $b + sqrt(($a - $b) * ($a - $b))) / 2;
}

Спустя 4 минуты, 50 секунд (20.04.2012 - 13:52) MatrixGod написал(а):
Michael, не совсем точно.
print mmax(3, -7) выводит -7.

Спустя 3 минуты, 36 секунд (20.04.2012 - 13:56) Michael написал(а):
Цитата (MatrixGod)
придумал с использованием корня

А как же:
Цитата (MatrixGod)
можно использовать только арифметические операторы + - * / и деление по модулю



Цитата
Michael, не совсем точно.
print mmax(3, -7) выводит -7.

может речь все таки о натуральных числах шла, а ты просто не понял?

Спустя 2 минуты, 11 секунд (20.04.2012 - 13:58) MatrixGod написал(а):
Michael, нет, о целых, я перепроверил.
хз, я понятия не имею как иначе сделать.
поэтому и обратился к вам в надежде что кто-то поможет.

это все что я смог сделать.

Спустя 1 минута, 39 секунд (20.04.2012 - 14:00) sergeiss написал(а):
А так? Нету ни деления по модулю, ни знаков больше-меньше :) Сравнение есть, но со "знаком вопроса". И нету ни циклов, ни ифов...

return (int) ($a / $b) ? $a : $b;


PS. И пофиг - дробные или целые числа.

PPS. Си и ПХП - будет работать точно.

Спустя 5 минут, 38 секунд (20.04.2012 - 14:05) glock18 написал(а):
по ссылке изящнее решение то... один минус - деление по модулю на отрицательное значение подводит.

а с корнем то все проще - и так понятно, что корень квадрата разницы = значение этой самой разницы по модулю. думается мне, что не прокатит, в условии задачи несколько только операций перечислено

Спустя 17 секунд (20.04.2012 - 14:06) MatrixGod написал(а):
sergeiss, это ведь ветвление. тот же иф только в профиль )))

Спустя 1 минута, 49 секунд (20.04.2012 - 14:07) Michael написал(а):
sergeiss, это у тебя условие.

Спустя 2 минуты, 26 секунд (20.04.2012 - 14:10) sergeiss написал(а):
Цитата (MatrixGod @ 20.04.2012 - 16:06)
sergeiss, это ведь ветвление.

Цитата (Michael @ 20.04.2012 - 16:07)
sergeiss, это у тебя условие.

В явном виде ИФа нету smile.gif

Спустя 1 минута, 50 секунд (20.04.2012 - 14:12) MatrixGod написал(а):
sergeiss, поверь мы с парнями уже обо всем подумали.
об этом тоже думали. но это использовать нельзя.

Спустя 13 минут, 5 секунд (20.04.2012 - 14:25) Michael написал(а):
Цитата
В явном виде ИФа нету
Цитата
Another conditional operator is the "?:" (or ternary) operator 

Спустя 2 дня, 16 часов, 33 минуты, 41 секунда (23.04.2012 - 06:58) sergeiss написал(а):
Ну так и какое "правильное" решение?

Спустя 27 минут, 52 секунды (23.04.2012 - 07:26) Michael написал(а):
тоже бы интересно посмотреть.

Спустя 3 дня, 5 часов, 2 минуты, 49 секунд (26.04.2012 - 12:29) Michael написал(а):
натрепался наверное препод или ТС все таки вероятней не так понял задание
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.