面試題 兩個變數的最大值 最小值和變數交換

2021-06-07 12:01:30 字數 577 閱讀 7786

//xk> 例題

【題目】不用if, ?: , switch等判斷語句,找出兩個給定變數中的最大值和最小值

【解答】要注意直接a + b可能導致溢位。

下面的解答來自《程式設計師面試寶典》第二版,很明顯存在溢位問題。不過這種思路有點意思。

int max = (a + b + abs(a - b)) >> 1;

int min = (a + b - abs(a - b)) >> 1;

這個題純粹是奇淫技巧,沒多大意義。下面的解更好一些,不過異號運算時a - b也可能會溢位!

int max = a - (((a - b) >> 31) & (a - b));

int min = a + (((b - a) >> 31) & (b - a));

//xk> 例題

【題目】不用第3個變數,交換兩個中存放的值。

【解答】這就是程式設計中常用的小技巧鳥。下面的解答形式優美好記,三個^=運算子中間交替填上兩個變數名

a ^= b ^= a ^= b;

NYOJ 最大值和最小值

最大值和最小值 時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 小明在上c語言課時老師布置了一道程式設計作業,要求是給你乙個數 數的長度小於100 讓你求出由該數的數字組成的最大值和最小值,由於小明程式設計學的不好但為了完成作業,想請你幫助他。輸入第一行輸入乙個數n 0輸出 ...

交換最小值和最大值

本題要求編寫程式,先將輸入的一系列整數中的最小值與第乙個數交換,然後將最大值與最後乙個數交換,最後輸出交換後的序列。注意 題目保證最大和最小值都是唯一的。輸入格式 輸入在第一行中給出乙個正整數n 10 第二行給出n個整數,數字間以空格分隔。輸出格式 在一行中順序輸出交換後的序列,每個整數後跟乙個空格...

交換最小值和最大值

此題使用函式做法 7 4 交換最小值和最大值 15分 本題要求編寫程式,先將輸入的一系列整數中的最小值與第乙個數交換,然後將最大值與最後乙個數交換,最後輸出交換後的序列。注意 題目保證最大和最小值都是唯一的。輸入格式 輸入在第一行中給出乙個正整數n 10 第二行給出n個整數,數字間以空格分隔。輸出格...