这几天遇到的一些面试题

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状态转移

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