Comments 72
a*a+b*b+1 всегда больше и a и b
-4
abs(a+b) — abs(a-b)?
0
2 минуты.
0
a=-3, b=-6
abs(a+b)-abs(a-b) = abs(-3+(-6))-abs(-3-(-6)) = 6
abs(a+b)-abs(a-b) = abs(-3+(-6))-abs(-3-(-6)) = 6
+1
abs() — по сути условный оператор, так что это не решение.
из java.lang.Math например:
из java.lang.Math например:
public static int abs(int a) {
return (a < 0) ? -a : a;
}
0
Не, ну сказано же, что задача математическая, а не по программированию.
0
Ну в определении модуля для вещественных чисел все равно фигурирует условие. Поэтому и написал «по сути».
0
Модуль тоже можно выразить простой математикой. Например:
int abs(int a) { return sqrt(a*a); }
int abs(int a) { return sqrt(a*a); }
+3
Безусловно, вы правы. Но, на мой взгляд, когда пишут просто abs(a) подразумевают |a|.
-3
abs(10+3) — abs(10-3) = 13 — 7 = 6. Не работает.
+1
(a/b) * (a — b) + b
0
a * (a — b + |a — b|) / 2 + b * (b — a + |b — a|) / 2
0
((a-b)-|a-b|)/(2*(a-b))*b+((b-a)-|b-a|)/(2*(b-a))*a
+3
Так как оба числа находятся на расстоянии полуразности от их среднего:
(a+b)/2 + abs(a-b)/2
среднее + абсолютная полуразность
(a+b)/2 + abs(a-b)/2
среднее + абсолютная полуразность
+15
Вот это мое решение! :)
0
Опять-таки, не учитывает, что числа могут быть отрицательными. Но красиво :)
-2
Отрицательные числа в данном случае учитываются. Это хорошее решение.
+1
-3 и -4.
|-3-4|/2 + |-3+4|/2 = 7/2 + 1/2 = 4
Для этого примера решение не работает.
|-3-4|/2 + |-3+4|/2 = 7/2 + 1/2 = 4
Для этого примера решение не работает.
-1
Но и в этом решении есть минус. Подставьте, например, -5 и 4.
-1
Подставил. Получил правильный ответ: (-5+4)/2 + abs(-5-4)/2 = 4
0
На этом примере нормально:
(a+b)/2 + abs(a-b)/2 = (-5+4).2 + abs(-5-4)/2 = -0.5 + 4.5 = 4
(a+b)/2 + abs(a-b)/2 = (-5+4).2 + abs(-5-4)/2 = -0.5 + 4.5 = 4
0
Отлично, но я удивлен, что это не 1-5 комментарий.
Молодеет Хабр.
Молодеет Хабр.
0
Всмысле, — удивлены? Я решил эту задачу позавчера, просто было бы глупо сразу ответ в топике написать :)
0
Кстати, можно записать так
((a+b) + abs(a-b))/2
((a+b) + abs(a-b))/2
0
Так-с, удалось избавиться от модуля. Вот программерское решение для 32-разрядных чисел:
a — ((a — b) >> 31) * (a — b)
a — ((a — b) >> 31) * (a — b)
+2
a=-5
b=4
Ответ: 36
ЧЯДНТ?
b=4
Ответ: 36
ЧЯДНТ?
0
Я не знаю, каким образом Вы получили 36. На данном примере должно быть так:
Ответ правильный.
a - ((a - b) >> 31) * (a - b) = -5 - ((-5 - 4) >> 31) * (-5 - 4) = -5 - (-9 >> 31) * -9 =-5 - -9 = 4
Ответ правильный.
0
Извините, ответил ниже:
-5 — (-9 >> 31) * -9 = -5 — (-1) * -9 = -14
-5 — (-9 >> 31) * -9 = -5 — (-1) * -9 = -14
0
Я тоже обсчитался — ответ не 36, а -14.
0
-9 >> 31 = 1, а Вы почему-то получили -1
0
Это -1. Проверьте в вашем любимом компиляторе.
0
Точно, я забыл сделать & 1. Тогда вот новое решение, без этого недостатка:
a - (((a - b) >> 31) & 1) * (a - b)
0
Кстати, интересно. Я только что проверил -9 >> 31 на разных компиляторах:
C: -1
PHP: -1
Perl: 1 (только тут я делал -9 >> 63, так как используются 64 разрядные числа)
Данный код на Perl вернул правильный результат: 4.
Но в любом случае, конечно, вариант с &1 использовать предпочтительнее, так как он более универсален.
C: -1
PHP: -1
Perl: 1 (только тут я делал -9 >> 63, так как используются 64 разрядные числа)
my $a = -5;
my $b = 4;
print $a - (($a - $b) >> 63) * ($a - $b);
Данный код на Perl вернул правильный результат: 4.
Но в любом случае, конечно, вариант с &1 использовать предпочтительнее, так как он более универсален.
0
-5 — (-9 >> 31) * -9 = -5 — (-1) * -9 = -14
0
Наверное не по правилам, но
return last_value(sort(array(a,b)));
return last_value(sort(array(a,b)));
0
Решение на плюсах без сравнения и условий:
char getMax(char a, char b)
{
char m[2];
m[0]=b;
m[1]=a;
a-=b;
return m[(a>>8)+1];
}
+1
Не заглядывая в комментарии: a*(1 + (a-b)/|a-b|)/2 + b*(1 + (b-a)/|b-a|)/2
0
Sign up to leave a comment.
Найти большее значение без сравнения и условий