兩種方法用巨集定義寫出swap(x,y)

2021-07-06 07:07:57 字數 762 閱讀 3620

問題引出:

如何將a,b交換,且不使用任何中間變數?

方法一:算術運演算法

a=a+b;

b=a-b;

a=a-b;

方法二:邏輯運算法

a=a^b;

b=a^b;

a=a^b;

若採用巨集定義完成此功能,對應有2種方法,如下示例**:

#includeusing namespace std;

//巨集定義swap(x, y),使之完成交換x,y的值

#define swap1(x, y) \

(y) = (x) + (y); \

(x) = (y) - (x); \

(y) = (y) - (x);

#define swap2(x, y)\

x = x^y;\

y = x^y;\

x = x^y;

int main()

{ int a = 3, b = 5;

cout<

結果如下圖:

注意:

對於swap1,當輸入的資料是不同種型別的話,這個巨集的結果是不對的。 

對於swap2,只適用於整型資料。

LCA兩種方法

lca least common ancestors 即最近公共祖先,是指在有根樹中,找出某兩個結點u和v最近的公共祖先。模板題 anc i j 表示第i個點的2 j的祖先的標號 整個過程就是兩個點往上跳到同一深度,再一起往上跳找到lca include include using namespac...

post get 兩種方法

a.定義乙個get函式 get url,headers none defget url,headers none return urlrequests url,headers headers 內部可以呼叫urlrequests 如果不寫headers headers會被預設為none b.定義乙個p...

C 定義變長陣列方法(兩種方法)

c 定義變長陣列方法 這裡說的變長陣列是指在編譯時不能確定陣列長度,程式在執行時需要動態分配記憶體空間的陣列。實現變長陣列最簡單的是變長一維陣列,你可以這樣做 includeusing namespace std int main 注意int p new int len 這一句,你不能這樣做 int...