Вопрос, как упоминалось выше, имеет следующий вид: Если заданы два целых числа x1 и x2, найдите другое целое число x3, которое отличается от x1 и x2, не используя ключевое слово if.Для двух целых чисел найти третье целое число, отличное от данных двух, без использования, если statment
Мое решение основано на битовых действиях на целых числах плюс на то, что XOR между двумя битами будет возвращать 1 тогда и только тогда, когда два бита не равны.
Действительно ли это решение? Можете ли вы найти лучшее решение? Конечно, время ожидания и потребление памяти должны быть максимально хорошими.
Примечание: тройные операции и сравнения (.! - т.е. =, ==) являются, а также не допускается
Спасибо заранее,
Guy.
Мое решение:
int foo(int x1,int x2)
{
// xor
int x3 = x1^x2;
// another xor
x3 = x3^x2;
// not
x3 = ~x3;
return x3;
}
Что у вас есть '~ (x^y^y)', который является просто '~ x', поэтому он не работает, если' y = ~ x'. – Ryan
'z = x^y; z = z^y' означает 'z = x', тогда' z == ~ x' может быть '~ x == y' ??? –
Вы можете использовать скрытые 'if', используя мультипликативные свойства:' a = c * x + (1-c) * y', который дает вам x, если 'c == 1' и y, если' c == 0'. Может быть, это каким-то образом? –