Изменить местами значения двух переменных без использования третьей

Задачи с IT-собеседованийРубрика: JuniorИзменить местами значения двух переменных без использования третьей
0 +1 -1
danil_mogilniy спросил 2 года назад

Даны две переменные — a и b. Например, они равны a=2; b=3. Необходимо поменять местами эти числа (то есть a=3, b=2). Но не используя третью переменную.

mo3ilo ответил 2 года назад

если тип переменной будет отличен от integer, то вы никак не поменяете переменную без использования третей

VadimBrik ответил 2 года назад

Можно воспользоваться указателями (если язык их поддерживает)
Как пример код на С++:

char *a = «5»;
char *b = «7»;

a += 2 * (b — a);
b -= (a — b);
a -= (a — b) / 2;

5 ответ
2 +1 -1
danil_mogilniy ответил 2 года назад

1.
a = a + b;
b = a — b;
a = a — b;

2.
a = a ^ b;
b = b ^ a;
a = a ^ b;

1 +1 -1
VadimBrik ответил 2 года назад

Как вариант еще можно так:
a += b — (b = a)
А в некоторых языках можно так
[a, b] = [b, a] ( В JS)
a, b = b, a (В Ruby) 

VadimBrik ответил 2 года назад

Для больших чисел лучше использовать a ^= b ^ (b = a), иначе можно выйти за диапазон допустимых значений

1 +1 -1
Anseltis ответил 2 года назад

еще проще — операция xor
a = a ^ b;
b = a ^ b;
a = a ^ b;
 

VadimBrik ответил 2 года назад

Так даже более правильно будет. В случае со сложением если значения переменных будут достаточно большими можно легко выйти за диапазон допустимых значений. XOR решает эту проблему. Но необходимо понимать что это работает с int, а вот для string или каких-то своих типов прийдется использовать другой подход. У меня в колледже на 3 курсе было задание по C++: «Необходимо поменять значения двух строковых переменных без использования третей», вот тут уже прийдется пользоваться указателями.

char *a = «1st string»;
char *b = «2nd string»;

a += 2 * (b — a);
b -= (a — b);
a -= (a — b) / 2;

0 +1 -1
logistser ответил 11 месяцев назад

a = a + b
b = a — b
a = a — b

0 +1 -1
Khachatur ответил 11 месяцев назад

a=2
b=3
a, b = 3, 2