這幾天遇到的一些面試題

1.有8瓶藥,只有唯一的一瓶藥有效果,生效時間爲兩小時,如何用最少的試藥人在兩小時內找到這瓶藥。

首先想到的是最多肯定是7個人。
然後看題大概是一個人要吃幾瓶藥,才能減少人數,排列組合?
通過幾次試着寫,發現4個人可以解決,在寫的時候感覺有點像組合
大概就是不同人的組合標記一種藥,人數的不同的不同組合。
然後就想到了二項式分佈。
    8 = 2^3 = C(0,3) + C(1,3) + C(2,3) + C(3,3)
    將8瓶藥標記爲A,B,C,D,E,F,G,H
    C(1,3)對應3個人沒人吃一種不一樣的藥,(1,A),(2,B),(3,C)
    C(2,3)對應每兩個人吃一種不一樣的藥,(1.2,D),(1.3,E),(2.3, F)
    c(3,3)表示3個人吃同一種藥,(1,2,3. G)
    c(0,3)表示有一種藥沒人吃。
綜合上面
    1 ADEG
    2 BDFG
    3 CEFG
所以答案就是3

2.今天做筆試遇到一道比較扯的題。

題目給了一個結構體,名字記不起了,假設爲SC,然後又給了一個結構體數組。大概內容如下

struct SC{
    char* String
    int Code;
};
SC auString2Number[] = {
    {"abc", 0x10},
    {"abd", 0x11},
    ...
    {null, 0},
    ...
    {"zzz", 0x80}
};

叫你實現函數int getCode(char* string);
用二分查找實現,給你一個字符串,叫你返回它的Code,沒找到返回-1.
結構體數組除開裏面的所有的{null,0},是按照字典順序升序的,裏面混雜了一些{null,0}.

  • 第一步

    • 確定該結構體數組的長度,通過觀察可以發現,code值是遞增的,當然是除開那些搗亂的{null,0}, 得到一個大概長度,就可以開始遍歷數組,如果是null,就把size+1,(for(int i = 0; i < size; ++i)),就得到了數組的長度。
  • 然後就可以開始寫二分查找了。

    • 編寫自己的字符串比較函數,因爲題目明確要求不能使庫函數
      然後是二分查找了,在查找中如果我定義mid1,mid2,最開始mid1=mid2,然後先mid1向左遍歷,直到mid1所指向的結構體的String!=null,mid2向右遍歷。
      判斷給定的string和mid1指向的string的情況,不比mid1小,在比較mid2和string的情況。

3.一道選擇題,問TCP連接斷開,程序的網絡的狀態轉移過程

-題記不清了,不過我找到了一張圖
TCP狀態轉移

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章