一道面試題 不用中間變數交換兩個整型變數的值

2021-06-26 00:27:43 字數 1847 閱讀 7069



分類: c/c++

已經進入九月份了,馬上又要進入新一輪的校園招聘了,想想自己也已經畢業一年多了,依稀還記得當年面試筆試時遇到的一些面試題,所以決定寫一些東西出來分享下,期待能對學弟學妹們有些許的幫助,在此也不勝幸慰了。當然,我也只是乙個新手,不對的地方望各位指出,共同學習進步。

大家都知道,校園招聘一般考的都是些c語言(這裡只對招聘c語言程式設計師而言,其實招c++的很多時候考的也是c)的基礎和細節問題,並不會考你怎樣在linux/unix環境下用c程式設計,寫個串列埠通訊的程式等等問題,最多就是面試時問下你會不會linux/unix,然後大概了解下你熟悉的程度,所以基礎和細節很重要,最好能買本有關面試方面的書看看,如《程式設計師面試寶典》,在這裡我想談談面試時遇到的一道試題:不用中間變數如何交換兩個整型變數的值?請寫出**。這樣的題其實在排序的演算法中也是可以隱式的考察的,能夠看出乙個人有否c程式設計技巧的概念,即是否注意c語言的效率問題。這題在老譚的那本書上也有(對於老譚的書我不想多說什麼了,大家都心中有數)。下面來看看**吧:

#

include

void intswap(

int*ptest1,

int*ptest2)

;int main(

int argc,

char

*argv)

void intswap(

int*ptest1,

int*ptest2)

執行輸出(紅色為自己輸入的數值):

input first integer:

10

input second integer:

5

output,swap two integer:    5    10

用三個異或就可以得到想要的結果了,也許有人很疑惑為什麼要考這種題,因為任何數在計算機中都是一組0、1的組合,所以位運算的效率比其他運算子都要高。

還記得在某個c語言的qq群中,有個在讀生問怎麼把字串反序輸出,這種問題對於大部分初學者來生第一反應就是用個中間變數作為過渡,交換字串首尾的字元,那麼有沒有好點的方法呢?(不能說更好,可能還有別的高效率方法,反正我是不知道^_^)看了前面交換兩個整數,大家應該會有點啟發,因為字元也是以整數儲存在機器中的,所以我們就自然想到了用三個異或去交換,相信在面試時如果能這樣答題,一定會給面試官留下乙個深刻的印象,就像有些人在面試中盡量用switch代替if-else寫程式一樣。。。不走尋常路,這點在面試筆試中很重要。

#

include

#define number_len 1024

#define err(fmt, args...

)fprintf

(stderr

,"traceutil> error: " fmt,

## args)

int main(

)numbytes =

strlen

(array)

;for

(idx1 = 0, idx2 = numbytes - 1; idx1 < idx2; idx1+

+, idx2--)

printf

("%s\n"

, array)

;exit

(0);

}

在面試筆試常考的東東中還有給一組整數,然後叫你用各種排序演算法進行排序,如氣泡排序、shell排序、快速排序等,在這些排序中難免要交換兩個元素的值,此時我們就可以用上面的方法去實現了,關於排序以後有空再說吧~

面試題 交換兩個變數的值

面試題 交換兩個變數 也許當你聽到這道題的時候會暗暗的發笑,這麼簡單的演算法題竟然拿出來作為面試題考,是不是也在懷疑這家公司的本身的能力與規模了呢。交換兩個變數 例如num1 5,num2 6 num1 6,num 5 怎麼樣是不是覺得灰常簡單,你是不是用下面的方法做的 int num1 5 int...

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...

一道面試題

前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...