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

2021-07-29 03:27:25 字數 1230 閱讀 7941

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

1、加減法:該方法可以交換整型和浮點型數值的變數,但在處理浮點型的時候有可能出現精度的損失

a = a + b;

b = a - b;

a = a - b;

2、異或法:可以完成對整型變數的交換,對於浮點型變數它無法完成交換。

a = a^b;

b = a^b;

a = a^b;

3、乘除法:可以處理整型和浮點型變數,但在處理浮點型變數時也存在精度損失問題。而且乘除法比加減法要多一條約束:b必不為0。

a = a * b

b = a / b

a = a / b

交換瓶子

有n個瓶子,編號 1 ~ n,放在架子上。

比如有5個瓶子:

2 1 3 5 4

要求每次拿起2個瓶子,交換它們的位置。

經過若干次後,使得瓶子的序號為:

1 2 3 4 5

對於這麼簡單的情況,顯然,至少需要交換2次就可以復位。

如果瓶子更多呢?你可以通過程式設計來解決。

輸入格式為兩行:

第一行: 乙個正整數n(n<10000), 表示瓶子的數目

第二行:n個正整數,用空格分開,表示瓶子目前的排列情況。

輸出資料為一行乙個正整數,表示至少交換多少次,才能完成排序。

例如,輸入:

5 3 1 2 5 4

程式應該輸出:

3再例如,輸入:

5 5 4 3 2 1

程式應該輸出:

2資源約定:

峰值記憶體消耗 < 256m

cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

#include

int data[10005];

int main()

printf("%d", opt);

return

0;}

不借助變數交換兩個數

文章 不借助if switch等語句求兩個數較大的乙個 交換兩個數在排序演算法中用的很多 氣泡排序中 插入排序中等等。正常的交換兩個數是借助乙個變數tmp void swap int a,int b 在面試題中有這樣的題目 不借助第三個變數,交換兩個數 a方法 void swap int a,int...

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

這是一道經典題目,很基礎,但是經常考。題目描述 不用任何變數交換a b兩個變數。分析 交換兩個變數的問題在c語言入門書籍中都有所涉及。在講解c語言的函式的時候老師都會告訴我們,實參和形參的問題,下面的函式是不能完成交換兩個變數的 void swap int a,int b int temp temp...

使用異或運算 不借助臨時變數交換兩個數

通常交換兩個變數需借助乙個臨時變數,如 int temp temp a a b b temp 使用異或可以不借助臨時變數交換兩個數 a a b b a b a a b 這是用了異或的自反性性質做到的 a b b a 0 a 具體推導過程 第一步 a a b 第二步 b a b a b b a 經過第...