2011-03-17 49 views
4

我不得不使用第三个变量将两个变量与一个数值交换。什么是简单的解决方案?如何在没有第三个变量的情况下进行交换?

+1

的[SWAP两个变量的值,而无需使用第三可变]可能重复(http://stackoverflow.com/questions/756750/swap-the实现它 - 值-的二变量,而无需-使用-第三变量)。另外[交换两个变量,而不使用临时变量](http://stackoverflow.com/questions/804706/swap-two-variables-without-using-a-temp-variable) – 2011-03-17 20:31:48

+0

http://stackoverflow.com/questions/804706/swap-two-variables-without-using-a-temp-variable – Inisheer 2011-03-17 20:32:51

+0

@我会在采访中看到一些使用这些东西的窍门。我不知道它是什么意思*证明*,但我已经看到它.. – ray 2017-06-02 22:18:48

回答

16

让我们看看其中一种方法,即使用算术运算符。 考虑2个变量,表示x = 50和y = 70,让我们看看如何交换两个变量的值,使x = 70和y = 50而不使用第三个变量。 Ÿ
X = X - - Ÿ
其中给出
•X = X + Y给出x这可以通过使用以下算术运算即
X = X + Y
Y = X来完成= 70 + 50,因此x等于120
y = x-y给出y = 120-70,其使得y的值为50
•x = x-y给出x = 120-50并且因此x的值变为70

+0

如果x或y的比例非常大,那么该怎么办? – jonsca 2011-03-17 20:34:03

+2

这是一个很好的解决方案,但必须注意溢出 – Fede 2011-03-17 20:34:12

+4

回答'x - = y =(x + = y) - y;'并告诉老师这是有史以来最蹩脚的问题之一。 – Amadan 2011-03-17 20:40:35

1

这里我们在MIPS汇编器中有这个。第一种解决方案很长很糟糕。第二个与异或比较好。

addi $t0, $0, -5 
addi $t1, $0, 15 

add $t0, $t0, $t1 
sub $t1, $t1, $t0 
nor $t1, $0, $t1 
addi $t1, $t1, 1 
sub $t0, $t0, $t1 

#### 

xor $t0, $t0, $t1 
xor $t1, $t0, $t1 
xor $t0, $t0, $t1 
4
int x = 15; 
int y = 5; 

x = x + y; 
y = x - y; 
x = x - y; 
10

可以与XOR

int A = ...; 
int B = ...; 
A = A^B; 
B = A^B; 
A = A^B; 
+0

@Bertrand,我只是做了一个“思维测试”,仍然认为没关系。如果A等于B,则在第一次赋值时,A的结果为0,则B赋值为0 XOR B即B,然后A赋值为0 XOR B,再次为B(这等于起始A) 。 – Fede 2011-03-17 20:57:03

+0

A = 1,B = 1。步骤1:A = A^B = 1^1 = 0。步骤2:B = A^B = 0^1 = 1。第三步:A = A^B = 0^1 = 1。看起来它对我有用。 – 2011-03-17 21:42:58

相关问题