2012-9-25 创新工场笔试题

1. 字节对齐问题: sizeof(Student)=24(求解释,为什么不是20)

struct Student

{

int a; int b; double c; int d;

} ;

2. 高度为h的二叉树,其节点的度要么为0要么为2,问树中节点的最多最少(忘记了)的个数(树的节点的度是指该节点的子树的个数,也就是出度的数值,故最少为2^h+1, 最多为2^(h+1) -1)

3. 1024!的末尾0的个数,详细分析见http://bbs.chinaunix.net/thread-926848-1-1.html

4. 给定IP:10.23.24.29和子网掩码255.255.255.224,求跟该IP属于同一子网的IP地址(10.23.24.30)

5. 某一系统有5台绘图仪,现系统中有多个线程,每个线程需要两台绘图仪,现问至多可以给几个线程分配绘图仪而不发生死锁?(答案为4)

6. 不记得了

7. 百度首页输入搜索字符时会出现提示,问后台采用的是何种数据结构(感觉应该是哈希表)

8. 给定一个整数,将其奇数位比特和偶数位比特交换(思路:将该整数左移一位,后与10101010进行&运算后,就将原来的整数中的偶数位bit移动到了奇数位并且结果的偶数为全部为0; 将该整数右移一位后,与01010101进行&的运算,原奇数位移动到了偶数位并且奇数位全部为0;将前两步得到的结果进行|运算,即为最终结果)

9. 一下代码的输出

string c1("Ininiitt");
string c2("sdssdsdsd");
string& c3 = c1;
string* c4 = &c2;
c3=c2;
cout<<c2<<endl;
c4=&c1;
cout<<*c4;

结果:sdssdsdsd sdssdsdsd

10. 给定一段字符串,里面包含n个单词,单词与单词之间以空格分开,请将该字符串中单词逆置("this is a test"==》"test a is this“,不能使用字符串函数)求高效省空间算法

先将所有的字符串逆置,然后再针对每个单词逆置

void reversestr(char * str, int lenth)
{
    int half = lenth / 2;
    int i = 0, j = lenth-1;
    char temp = '\0';
    while(i < half)
    {
        temp = str[i];
        str[i++]=str[j];
        str[j--]=temp;
    }
}

void reverseSentence(char* str)
{
    if(str == NULL || (*str) == ' ') return;
    int lenth = strlen(str);
    reversestr(str, lenth);
    char* first=str, *second=str;
    while(*second !='\0')
    {
        if(*second==' ')
        {
            reversestr(first,second-first);
            while((*second)==' ') second++;
            first = second;
        }
        second++;
    }
    reversestr(first, second-first);
}


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页