不使用中間變數交換變數a b變數

2021-05-22 15:34:45 字數 658 閱讀 4555

這是一道經典題目,很基礎,但是經常考。

題目描述:不用任何變數交換a、b兩個變數。

分析:交換兩個變數的問題在c語言入門書籍中都有所涉及。在講解c語言的函式的時候老師都會告訴我們,實參和形參的問題,下面的函式是不能完成交換兩個變數的:

void swap(int a,int b)

int temp;

temp=a;

a=b;

b=temp;

大家都懂,就不用多說,用引用或者指標就能解決這個問題(在c++中用引用是更好的做法,引用不是c的語法吧)。

問題在於,筆試面試中考的比這個更有難度一點,加了個限制:不使用中間變數。知道答案之後還是比較簡單的,直接上答案了:

void swap(int &a,int &b)

a=a+b;

b=a-b;

a=a-b;

還有一種思路更高明,因為上面這個函式基本能滿足,但是如何a+b溢位呢?或許一般都沒考慮這個問題吧,作為答案應該算正確,不過程式設計師就應該追求完美,用異或操作能得到更優雅的答案:

void swap(int& a,int& b)

a=a ^ b;

b=a ^ b;

a=a ^ b;

這些方法,想到了還是很簡單,沒想到就很痛苦了。慢慢體會吧。

下面是完整的測試**:

不使用中間變數交換兩數

交換兩個數的值是比較基礎也比較常用的演算法,比如在氣泡排序法中,從第一數開始比較,如後乙個數比其小則交換兩數的值。一般在交換兩數的值是,最簡單的方法適用的方法就是用中間變數暫存乙個數。例如,要交換a,b的值,可使用中間變數c暫存其中的乙個數。核心 如下 c b b a a b 當然也可以不使用中間變...

不使用中間變數實現兩個變數的交換

在實現程式功能時,我們經常要進行變數數值的交換,最近學習到在c語言中不用定義新變數來實現兩個變數數值的交換的方法,跟大家分享一下!下面是演算法的實現 include int main 程式可能有點難理解。在順序結構程式中,程式一條一條的依次執行。為了避免值和變數名的混淆,假定使用者輸入的是a0和b0...

交換a,b(不借助中間變數)

交換a,b 不借助中間變數 1 加減法 該方法可以交換整型和浮點型數值的變數,但在處理浮點型的時候有可能出現精度的損失 a a b b a b a a b 2 異或法 可以完成對整型變數的交換,對於浮點型變數它無法完成交換。a a b b a b a a b 3 乘除法 可以處理整型和浮點型變數,但...