搜狗笔试经历
这次笔试总觉得还可以,至少没有感觉卡壳的地方,虽然应该还是出现很多错误的,总觉得笔试答的还是可以的。以下依靠回忆记录一下笔试的题目。
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判断是否重复...
这个题目仅仅是提供了一下思路,和实现的距离还是相差很远的。
运气还是不错的,竟然把所有算法的思路都理清了...