採用演算法來將a b的值進行 直接 交換

2021-10-24 21:36:21 字數 626 閱讀 5910

簡單來說,就是通過普通的+和-運算來實現。**如下:

int a,b;

a=10;b=12;

a=b-a; //a=2;b=12

b=b-a; //a=2;b=10

a=b+a; //a=12;b=10

通過以上運算,a和b中的值就進行了交換。表面上看起來很簡單,但是不容易想到,尤其是在習慣標準演算法之後。

它的原理是:把a、b看做數軸上的點,圍繞兩點間的距離來進行計算。

具體過程:第一句「a=b-a」求出ab兩點的距離,並且將其儲存在a中;第二句「b=b-a」求出a到原點的距離(b到原點的距離與ab兩點距離之差),並且將其儲存在b中;第三句「a=b+a」求出b到原點的距離(a到原點距離與ab兩點距離之和),並且將其儲存在a中。完成交換。

此演算法與標準演算法相比,多了三個計算的過程,但是沒有借助臨時變數。(以下稱為算術演算法)

Redis採用的Hash演算法

在redis中,採用bernstein的hash演算法,具體 如下 unsigned int dictgenhashfunction const unsigned char buf,int len 解釋 把字串轉化成乙個無符號32位int型別,範圍從 0x00000000u到 0xffffffu,但...

每日演算法之a b和尾部零的演算法

a 1,b 2,不使用加減乘除,來實現a b的效果。可以使用位操作符 演算法思路 1 1 0,0 0 0,1 0 1,可以看出和異或產生的效果類似。上面的加法雖然可以用異或來實現,但是還有1 1的進製問題,可以用另一種方式解決,比方說 1 1 0,可以通過1 1,為0,同時,將其左移一位即可獲取進製...

聯盟計畫將促進制元幣現金的採用

由於位元幣現金的目標是成為世界上最好的貨幣,因此讓更多人使用位元幣現金一直都是每乙個位元幣現金支持者的心願。為了提高位元幣現金的採用率,乙個名為professional rakeback的團隊提出了聯盟計畫。其實聯盟計畫對我們來說並不陌生,它是一種非常常見的營銷手法。目前很多加密數字交易平台都採用的...