149ea694a792f3ad2caaf77077a0df58 Спорящая с богом
Задачку интересную углядела, утаскиваю к себе.
Есть функция с прототипом int Max(int a,int b,int c). Возвращает, соответственно, наибольший из параметров. Даны 3 целых числа. Необходимо с помощью данной функции Max, неограниченного количества воспомогательных переменных и арифметических операций найти наименьшее из них. Условными операторами, операциями сравнения, а так же тетрарным оператором пользоваться нельзя.
Есть функция с прототипом int Max(int a,int b,int c). Возвращает, соответственно, наибольший из параметров. Даны 3 целых числа. Необходимо с помощью данной функции Max, неограниченного количества воспомогательных переменных и арифметических операций найти наименьшее из них. Условными операторами, операциями сравнения, а так же тетрарным оператором пользоваться нельзя.
int max(a, b){
return (a+b-mod(a-b))/2;
}
int max(a, b, c){
return max(max(a,b),max(b,c));
}
при добавлении отрицательных нужно добавить ещё один модуль
Нет, ты не понял задание. Есть функция возвращающая максимальное из трёх чисел. Надо с помощью этой функции найти минимальное из трёх чисел, не пользуясь условными операторами.
return max(a, 0, -a);
}
int min(a, b){
return (a+b-mod(a-b))/2;
}
int min(a, b, c){
max(max(a,b),max(b,c));
}
Да, но взятие модуля не является базовой арифметической операцией.
ОК, так годится.
Я имела в виду для языков программирования.
А при чём здесь хранение числа в памяти? Обнулением первого бита значение по модулю не получишь. В асме, кстати, тоже нет операции взятия модуля за одно действие, есть только NEG.
-Max(-a,-b,-c)
чем плох?
meharher
Охренеть... Гениальное решение! Честно, даже в голову не пришло.