Как переставить два числа, не используя третье?

аватар: DrBlack
Звание: Мастер
Сообщений: 1801

Доброго времени суток! Smile

Код который переставляет значения между двумя переменными:

tmp = A;
A = B;
B = tmp;

Как переставить два числа не используя третью переменную? Wink

ЗЫ: в гугл не смотреть, так не честно, попробуйте сами выкрутиться... )))

__________________

Ни что так не ограничивает логику программиста, как компилятор... Wink



]]>]]>

аватар: Darth_Vaider
Звание: Посвященный
Сообщений: 503

Легко))

a=10
b=20
a=a+b
b=a-b
a=a-b

__________________

Переводить код с Фортрана - всё равно, что переводить поэзию.

аватар: DrBlack
Звание: Мастер
Сообщений: 1801

Ок, еще варианты... Smile
Извращенцы есть среди нас? Big smile

UPD

Принимаются варианты на любом языке )
Своё извращение на 1С я выложу позже... ))))

__________________

Ни что так не ограничивает логику программиста, как компилятор... Wink



]]>]]>

аватар: MashTrashen
Звание: Наблюдатель
Сообщений: 20

Только для целых чисел можно так:
С

x^=y;
y^=x;
x^=y;

Ассемблер

XOR EAX EBX
XOR EBX EAX
XOR EAX EBX

__________________

Студент

аватар: AltaVista
Звание: Мастер
Сообщений: 1814

Delphi
Цитировать



a := a xor b;
b := a xor b;
a := a xor b;

__________________

Путь в тысячу миль начинается с одного шага.

аватар: DrBlack
Звание: Мастер
Сообщений: 1801

Ок, принято Smile
Значит у нас уже имеется: Сложением и XOR (С и Асма).

Извращенцы, вылазьте давайте )))
С преобразованиями надо еще попробывать Wink

__________________

Ни что так не ограничивает логику программиста, как компилятор... Wink



]]>]]>

аватар: DrBlack
Звание: Мастер
Сообщений: 1801

AltaVista, твой вариант уже представлен на С и асме Smile
Так что не принимаю )

__________________

Ни что так не ограничивает логику программиста, как компилятор... Wink



]]>]]>

аватар: Corvus
Звание: Мастер
Сообщений: 1054

Не знаю, прокатит ли такой ответ?

<? $a = 10; $b = 20; $a = array($b,$a); $b = array_pop($a); $a = array_reverse($a); $a = array_pop($a);

echo $a.' '.$b;

__________________

EVE ONLINE

аватар: MashTrashen
Звание: Наблюдатель
Сообщений: 20

Аналогично Darth_Vaider еще можно так

a=a*b; b=a/b; a=a/b;

__________________

Студент

аватар: McPain
Звание: Советник
Сообщений: 694

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 написал(а):

Как переставить два числа не используя третью переменную? Wink

Использовать четвертую. Laughing out loud

__________________

не ну или не не ну?

аватар: DrBlack
Звание: Мастер
Сообщений: 1801

Переменных две, больше ограничений нет, так что принято! Smile

Мой вариант на 1С:

А = 10;
В = 20;
А = "" + А + "|" + В; // "10|20" - получается строка
Б = Число(Лев(А, Найти(А, "|") - 1)); // Вырезаем число с лева
А = Число(Сред(А, Найти(А, "|") + 1)); // Вырезаем число с права

Если больше извращений не будет, можно начинать голосовать за самый клевый изврат... Laughing out loud

__________________

Ни что так не ограничивает логику программиста, как компилятор... Wink



]]>]]>