C語言 一道面試題 品茗股份

2021-10-20 13:03:24 字數 785 閱讀 1053

題目:a=3 b=5 交換a b的值 不能建立臨時變數

先試試建立變數的方式,可以試試前面講過的的賦值操作符」=「

這裡建立變數c,這樣就類似於自己把東西做個交換,把兩瓶水交換,用乙個空瓶做中間量,交換的話,假設c是那個空瓶,先將a倒入c,再將b倒入a,然後再將c倒入b,這樣就完成了交換。

int main()

按照上面說的,用**實現就是這個樣子,先把a賦值給c,再把b賦給a,最後把c賦給b。這樣就利用建立變數的方式完成了交換

現在說不建立臨時變數的方法

還是拿兩瓶水來解釋,假設兩個瓶子的容量都是100毫公升,a有50毫公升,b有30毫公升,可以先把b的水倒入a,那麼a裡面就有80毫公升,然後再把a的80毫公升倒入b50毫公升,現在a就等於30毫公升了,所以,**實現

int main()

a=a+b 就是把a和b兩瓶水到在一起,b=a-b 就是把a的50毫公升放到b裡面,a=a-b就是80毫公升減去b現在的50毫公升,就剩下30毫公升了,所以這裡就完成了交換。但是,就像這裡舉的例子,如果瓶子容量小的話,水就會溢位,在這道題的實現裡面,也會存在這樣的溢位問題,如果兩個值太大,就會溢位,造成結果不準確。

因為會溢位,所以可以用以前學的知識點,異或,用異或演算法就不存在相加,所以就不會溢位,異或:二進位制相同,那麼結果為0,如果二進位制不相同,那麼結果就是1,a 011,b 101,異或一次就是110,就是6

110再和011異或一次就是101,101和110異或一次就是011。這樣就達到了交換的目的,所以,**實現。

int main()

^就是異或的意思。所以按照上面說的方法,就完成了交換。

一道c 面試題

float a 1.0f cout int a endl cout int a endl int a 是什麼意思?cout boolalpha int a int a endl float b 0.0f cout int b endl cout int b endl cout boolalpha i...

一道面試題

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

一道面試題

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