問題:
如果x=10,y=23變為x=23,y=10不允許通過第三方變數
方法一:異或法
x= x^y;
y=x^y;
y=x^y;
證明:
易知不論異運算、或運算都不涉及進製、退位。
故可以考慮x,y一位時候的情況,他對任何位都是一樣的。
1、x=1,y=1
x=x^y=0
y=x^y=1
x=x^y=1
2、x=1,y=0
x=x^y=1
y=x^y=1
x=x^y=0
3、x=0,y=0
x=x^y=0
y=x^y=0
x=x^y=0
4、x=0,y=1
x=x^y=1
y=x^y=0
x=x^y=1
這一位與其他所有位情況一樣,就證明了演算法的正確。
從異或運算性質可得,異或滿**換律
從上面可以發現也滿足結合律,通過這連個定律也可以證明。
————————————————————————————————————————————
方法二:算術法
x=x+y;
y=x-y;
x=x-y;
不使用中間變數交換變數a b變數
這是一道經典題目,很基礎,但是經常考。題目描述 不用任何變數交換a b兩個變數。分析 交換兩個變數的問題在c語言入門書籍中都有所涉及。在講解c語言的函式的時候老師都會告訴我們,實參和形參的問題,下面的函式是不能完成交換兩個變數的 void swap int a,int b int temp temp...
不使用中間變數交換兩數
交換兩個數的值是比較基礎也比較常用的演算法,比如在氣泡排序法中,從第一數開始比較,如後乙個數比其小則交換兩數的值。一般在交換兩數的值是,最簡單的方法適用的方法就是用中間變數暫存乙個數。例如,要交換a,b的值,可使用中間變數c暫存其中的乙個數。核心 如下 c b b a a b 當然也可以不使用中間變...
不使用中間變數交換兩個數
在交換兩個數的值時,最經常使用的方法是借助於乙個中間變數來進行交換。temp a a b b temp 通過巧妙的加法與減法運算來實現兩個數的交換。a a b b a b a a b 使用位運算 異或 來交換兩個數。a a b b a b a a b 其正確性是因為異或運算滿足 交換律和 結合律。證...