读书人

都来见见今天的几个面试题有点深度

发布时间: 2012-11-03 10:57:44 作者: rapoo

都来看看,今天的几个面试题,有点深度。。。。
1,第一题:

C/C++ code
#include <stdio.h>static int check(int q[], int x){    int i;    for(i=0; i<x; i++)        if(q[i] == q[x] || q[i] == q[x] - (x - i)            || q[i] == q[x] + (x - i))            return 1;    return 0;}static void print_q(int q[], int x){    int i;    for(i=0; i<x; i++)        printf("(%2d,%2d) ",i,q[i]);    printf("\n");}#define N  8static void try(int q[], int x){    int i;    if(x < N)        for(i=0; i<N; i++){            q[x] = i;            try(q, x+1);        }    else        for(i=1; i<N; i++){            if(check(q, i))                continue;            if(i == N-1)                print_q(q, N);        }} int main(int argc, char *argv[]){    int queen[N];    try(queen, 0);})

1、这段代码的功能什么?(4分)
2、在代码左侧指出这段代码的一处错误。(6分)
3、在右侧空白给出更加完善高效的代码。(10分


2,第二题:
有八个硬币,有一个是假的,用天平量,不知道假的比真的重还是轻,请问:最少需要多少次,才能判断出假的,跟轻重(5分)。请用C代码实现(25分)。

3,第三题:
求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是 这两个节点间边的个数,
比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。


4,第四题:
递归题:
fun(int n)
{
if(n == 0)
return 0;
return fun(n/2)+1;
}

求fun(4) = ?


5,第五题:
某公司有1000个cpu,用10个箱子装,要求:无论客户要多少个cpu,都能整箱整箱的给客户。
问:怎样装cpu ?

6,第六题:
指针题:
int a[2][3] = {{1,2,3},{4,5,6}};
int *p = &a[0][0];
int m = (*p)*(*(p+2))*(*(p+4));
printf("%d", m);

m = ?
A:101 B:6 C:5 D:4


[解决办法]
第3题 处理方法应该有很多种 可以设有指向双亲的指针, 先把两节点调整到一个高度,记下调整次数a
然后判断两节点是不是同一节点,是则退出,不是则同时调整到各自的双亲节点,记下调整次数b
答案为a+2b

第5题 第一箱装2^0个 第二箱装2^1个...第9箱装2^8个 第10箱装1000-前面的
[解决办法]
2,第二题:
有八个硬币,有一个是假的,用天平量,不知道假的比真的重还是轻,请问:最少需要多少次,才能判断出假的,跟轻重(5分)。请用C代码实现(25分)。

这个至少得4次吧,好的情况下三次。
第一次,可以得到左右的轻重
第二次,选择轻的或者重的分开称,得到假的是轻的还是重的
第三次,分成2 2
最后 1 1

3,第三题:
求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是 这两个节点间边的个数,
比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。

从根节点深搜,找到最深的叶子节点,把此叶子节点当做根节点,再次深搜得到最深的点,这两点之间的距离就是最大的。


4,第四题:
递归题:
fun(int n)
{
if(n == 0)
return 0;
return fun(n/2)+1;
}

求fun(4) = ?

2

5,第五题:
某公司有1000个cpu,用10个箱子装,要求:无论客户要多少个cpu,都能整箱整箱的给客户。
问:怎样装cpu ?

10个箱子容量分别是1 2 4 8 16 64 128 256 512 1024
只要把1000内数字转换为2进制,为1的位就用对应的箱子装,肯定是整箱

6,第六题:
指针题:
int a[2][3] = {{1,2,3},{4,5,6}};
int *p = &a[0][0];
int m = (*p)*(*(p+2))*(*(p+4));
printf("%d", m);

m = ?
A:101 B:6 C:5 D:4
15

读书人网 >C语言

热点推荐