我想交换两个变量,只有 +=
和 -=
运算符,没有临时变量。我知道标准解决方案,例如:
a = a+b;
b = a-b;
a = a-b;
与异或
:
a ^= b;
b ^= a;
a ^= b;
但我无法弄清楚如何仅使用 +=
和 -=
来做到这一点。可能吗?
最佳答案
我的同学提供了一个很好的解决方案:
答案是NO
让 a
表示为 (1 0)
和 b
表示为 (0 1)
矩阵A
是
1 0
0 1
+=
和-=
表示互相加减行。这意味着行列式要么不改变其符号,要么等于 0
。结束矩阵为
0 1
1 0
行列式等于-1
,所以你不能得到它
更新: 你有这些操作:
a-=a
。一行变为0
,因此det=0
a+=a
。这意味着将一行乘以2
,因此det A'= 2*det A
a+=b
。这意味着初等变换,它不会改变det
的值
a-=b
。与3.
相同
然后将此证明应用于 b-=b
、b+=b
、b+=a
、b-=a
。所以行列式不会改变它的符号或者它是 0
更新 2:
正如@Tom 所说,这里是如何在 C# 中执行此操作的示例:http://ideone.com/UzVLML .但是,在 C 中这是不正确的:http://codepad.org/Rmhn9iqb .有人可以阐明 C 和 C# 中 b -= b += b
的区别吗?
关于c - 是否可以仅使用 += 和 -= 而不使用其他运算符或变量来交换两个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16667075/