搜狗笔试经历

这次笔试总觉得还可以,至少没有感觉卡壳的地方,虽然应该还是出现很多错误的,总觉得笔试答的还是可以的。以下依靠回忆记录一下笔试的题目。

1.文字表述一下char* (*empty[10])(const int** num)的含义。

这是一个函数指针数组。参数类型我其实不是很确定,(但是确定当时写错了...当时写的是指向整型指针的常量指针),这里有可能是指向整型常量指针的指针。返回类型十分确定,字符指针。

2.题目大概是一个程序结束输出判断的题目。

这个题目我其实也考虑错了,break只能跳出一层switch,上一层switch的case语句能够继续执行一个。这里大概应该是a = 1;b = 1;

#include <iostream>
int main()
{
    int x = 0,y = 1,a = 0;b = 0;
    switch(x)
    {
        case 0:
        {
            switch(y)
            {
                case 0:
                a++;
                break;
                case 1:
                b++;
                break;
            }
        }
        case 1:
            a++;
            break;
    }
    printf("%d,%d",a,b);
}

3.考察了int (*array)[10]的意义

这时候array是一个指向长度为10数组的指针。其实与int a[5][10]定义中的a的意义是一样的。

4.考察了二叉树的遍历方法,给出先序遍历的字符串和中序遍历的字符串,得出后序遍历的字符串。

5.将0x8912地址的值赋值为0x1923,这个我就不太明白了,不过我这样写也不太确定是不是正确。  

int* p;
p = 0x8912;
*p = 0x1923;

6.9个相同的钢球,其中一个与其他的质量不同,最少需要比较多少次能够找到该钢球。

我思考的是分为4,4,1,这样比较6次。但是分成2,2,2,2的话,仅仅需要比较5次。但是分成3,3,3的话,仅仅需要比较4次,所以这个题目我思考错了。

接下来是两个编程的题目。

1.对一个stack进行排序,要求不能够利用其它的数据结构。

不能够利用其它数据结构并不代表不能够利用stack了,所以这里利用两个stack可以完成排序。

我这里说一下思路:思路是新建一个stack辅助排序,这个stack来存放原先stack中pop()出的数据,这里假设新的栈是A,原先的栈是B。A中的数据我们保证是有序的,栈底元素最大。

可以这样保证,如果A中为空,B中的数据压入A中,如果不为空,比较A栈顶数据与B的数据,不断的将A栈顶数据弹出至B中,遇到比刚才B栈顶数据大的数据将其压入A中,然后B空了之后A中就是有序的数据。

这个代码我也完成了。

2. (九宫问题)在一个3×3的九宫中有1-8这8个数及一个空格随机的摆放在其中的格子里。现在要求实现这个问题:将该九宫格调整为如图1-1右图所示的形式。调整的规则是:每次只能将与空格(上、下、或左、右)相邻的一个数字平移到空格中。试编程实现这一问题的求解。

当时一看这个问题之后就懵了,完全没有思路...

之后理了一下思路,然后想到了之前的解空间搜索,直接穷举可以尝试。每一个解像4个方向走了之后有4个解,这样就是一个树形结构。

这样可以采取广度优先搜索的方法搜索解空间。然后判断是否出现回路,利用hashtable判断是否重复...

这个题目仅仅是提供了一下思路,和实现的距离还是相差很远的。

 

运气还是不错的,竟然把所有算法的思路都理清了...

         

   

posted @ 2013-09-17 16:21  weixliu  阅读(1724)  评论(4编辑  收藏