交換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 經過第...