都来见见,今天的几个面试题,有点深度。
都来看看,今天的几个面试题,有点深度。。。。
1,第一题:
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
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 8 static 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