http://blog.csdn.net/truelie?viewmode=contents
1. 用宏定义写出swap(x,y)
2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
int do_dup(int a[],int N)
3 一语句实现x是否为2的若干次幂的判断
4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001
参考答案:
1。
#define swap(x, y)/
x = x + y;/
y = x - y;/
x = x - y;
#define swap1(x, y)/
x ^= y;/
y ^= x;/
x ^= y;
对于swap,当输入的数据是不同种类型的话,这个宏的结果是不对的。
对于swap1,只适用于整型数据。
2。
第二题,采用hash表,对访问到的每一个数N,在hash表中记录其值为true,那么当再次访问到时,如果值已经为true,那么表明重复了,这样只要扫描一次,时间复杂度为O(n),而对hash表的访问时间复杂度是O(1)
3。
((i & (i - 1)) ? false : true)
4。
result ^= ( ((1<<n)-1) << p );
我的解答:1:62人 2 :92.16小时
第一题过程:为了使得及格的人数尽可能少 就让每一个人尽可能多的答对题目
答对5题:56人 则剩下的答对的题目是:24;16;28;32;0
答对4题:16人 则剩下的答对的题目是:8; 0; 12;16;0
答对3题:8 人 则剩下的答对的题目是: 0; 0 ; 4; 8;0
一共用了 56+16+8=80人,剩下20人
这20人先做如下分配:4个人 答对第3,4两题 4人答对第4题 12人全错
显然这样的分配是浪费了可能不及格的机会 因为只答对 第四题和全错的可以改造成答对2题的人
先拿出拿出只答对第4题的四个人 和 4个全部大错的人 来占据 答对3题的人每个人一道答对的题目
那么答对三题的人没有了
现在可以利用的资源是4个答对1题的人和8个全部答错的人 然后来针对答对4题的人 一共可以使得
4/2+8=10个答对四题的人变成答对2题
所以最后及格的人数为56+16-10=62 ,这也就是及格人数的最少的数目
答对0道题的最多 100-88=12
答对1道题的最多 88-84=4
答对2道题的最多 84-80=4
答对3最少 100-12-4-4=80
设汽车向前开的总时间为x,向后开的总时间为y。
10个人共走了(包括坐车)10*1000公里
在x时间内8个人在走,2人坐车,在y时间内9人在走,一人开车往回走。
汽车最终由A地到达B地。
所以
(1)(8*5+100*2)*x+(9*5-100*1)*y=10000
(2) 100*(x-y)=1000
总时间t=x+y=92.16小时
=============================
6道题目,
1 是swap的宏的定义
2. 用一个语句判断一个数是不是2的n次幂
3.判断sizeof作为参数传入的 char[]的长度
4.用两个栈实现一个队列
5.将字符串bcde转换为edcb
6.循环计数1-n,如果计到m,则打印出来
第一个面试官问了一些kernal的问题
第二个面试官问了更多kernal包括kernal panic,进程间通信,kernal向用户空间传递数据的方式,makefile正则表达式,OSPF路由算法的问题,软件体系结构,芯片与芯片的连接接口,main()如何调用,如何在main前调用不让main调用,kernal下分配内存的方法的问题
第三个面试官问了很多kernal的问题,如何调试kernal panic的问题,进程同步通信,make file ,cpu与芯片和芯片与芯片的连接方式,linux版本,不同体系结构下的移植,编译选项,文件系统,驱动的种类、编写方法,程序调试方法硬件调试仪器、方法,ip-table,arp-table?、socket类型,排序算法的种类,怎样把C程序反汇编看到汇编语言(gcc工具),代码编译的过程,所独立完成的项目等等等等