Page 1 of 1

### How to swap two variables... ??

Posted: Tue Mar 13, 2007 10:05 am
hi all...

I got a quiz...

How to swap two variables ???

only use two variables and two statements...

In general, the code is following...

Code: Select all

``````temp = a;
a = b;
b = temp;
``````
how to swap two variables using only two variables and two statements ?? do not use a temporary variable.. and 3 statements...

Posted: Wed Mar 14, 2007 1:24 am
Using bitwise operators you can do it like this:

Code: Select all

``a ^= b ^= a ^= b;``
Though I usually use STL provided swap function because it is faster to type and is more comprehentable, like that:

Code: Select all

``swap(a,b);``

Posted: Thu Mar 15, 2007 2:24 am

I suggested you have to use just 2 statements..

it means you must use 2 equal signs...

I know using bitwise operators suggested by Leonid..

I'm sorry but it's not the wanted answer

PS.. Sorry for poor english Posted: Sun Mar 18, 2007 12:15 am
If you can only do one assignment in one statement, it seems impossible -- after the first assignment, one of the variables is unchanged, the other has to have the new value, and thus one of the values is lost.

I think we need a more precise definition of what those "two statements" are allowed to be.
Technically,

Code: Select all

``````void swap(int &a, int &b) {
if (a>b) a--, swap(a,b), b++;
if (a<b) b--, swap(a,b), a++;
}
``````
can be considered to be two statements, and with no equal signs If you don't like the if-s, you may go one step further:

Code: Select all

``````void swap(int &a, int &b) {
(a>b) && (a--, swap(a,b), b++);
(a<b) && (b--, swap(a,b), a++);
}
``````
Aren't those two C++ statements? ### same

Posted: Mon Mar 19, 2007 9:15 pm
buty of arifmetica is
function swap(var a,b:T):T;begin
a:=-(a+b);
b:=-(a+b);
a:=-(a+b);
end;

or on array a[0..1]

for i:=0 to 2 do a:=-(a+a);