我想交换两个变量,只有+=和-=运营商,没有临时变量.我知道标准解决方案如:
a = a+b;
b = a-b;
a = a-b;
Run Code Online (Sandbox Code Playgroud)
并与xor:
a ^= b;
b ^= a;
a ^= b;
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何只用+=和-=.可能吗?
med*_*ick 10
我的同学提供了一个很好的解决方案:答案是 NO
让表示a作为(1 0)和b作为(0 1)
矩阵A是
1 0
0 1
Run Code Online (Sandbox Code Playgroud)
+=并且-=意味着相互增加或减少行.这意味着行列式要么不改变其符号,要么等于0.结束矩阵是
0 1
1 0
Run Code Online (Sandbox Code Playgroud)
与行列式相等-1,所以你无法得到它
更新:你有这些操作:
a-=a.一号线变0,所以det=0a+=a.这意味着乘以一条线2,所以det A'= 2*det Aa+=b.这意味着初级转型,它不会改变价值deta-=b.同样的事情3.然后将此证明了b-=b,b+=b,b+=a,b-=a.因此决定因素不会改变它的符号或它是0
更新2:正如@Tom所说,这里是如何在C#中做到这一点的例子:http://ideone.com/UzVLML .但是,在C语言不正确:http://codepad.org/Rmhn9iqb.有人可以澄清b -= b += bC和C#的区别 吗?