Как переставить два числа, не используя третье?
Доброго времени суток!
Код который переставляет значения между двумя переменными:
tmp = A; A = B; B = tmp;
Как переставить два числа не используя третью переменную?
ЗЫ: в гугл не смотреть, так не честно, попробуйте сами выкрутиться... )))
Легко))
a=10
b=20
a=a+b
b=a-b
a=a-b
Ок, еще варианты...
Извращенцы есть среди нас?
UPD
Принимаются варианты на любом языке )
Своё извращение на 1С я выложу позже... ))))
Только для целых чисел можно так:
С
x^=y;
y^=x;
x^=y;
Ассемблер
XOR EAX EBX
XOR EBX EAX
XOR EAX EBX
Delphi
Цитировать
a := a xor b;
b := a xor b;
a := a xor b;
Ок, принято
Значит у нас уже имеется: Сложением и XOR (С и Асма).
Извращенцы, вылазьте давайте )))
С преобразованиями надо еще попробывать
AltaVista, твой вариант уже представлен на С и асме
Так что не принимаю )
Не знаю, прокатит ли такой ответ?
<? $a = 10; $b = 20; $a = array($b,$a); $b = array_pop($a); $a = array_reverse($a); $a = array_pop($a);
echo $a.' '.$b;
Аналогично Darth_Vaider еще можно так
a=a*b; b=a/b; a=a/b;
MashTrashen написал(а):
Аналогично Darth_Vaider еще можно такa=a*b; b=a/b; a=a/b;
Не сработает, если b=0. Хотел предложить вариант с XOR'ами, но меня определили.
ASM (вроде так)
pop a;
pop b;
push a;
push b;
DrBlack написал(а):
Как переставить два числа не используя третью переменную?
Использовать четвертую.

Переменных две, больше ограничений нет, так что принято!
Мой вариант на 1С:
А = 10; В = 20; А = "" + А + "|" + В; // "10|20" - получается строка Б = Число(Лев(А, Найти(А, "|") - 1)); // Вырезаем число с лева А = Число(Сред(А, Найти(А, "|") + 1)); // Вырезаем число с права
Если больше извращений не будет, можно начинать голосовать за самый клевый изврат...