Google笔试题

一、选择题

1)  机器指令与微指令的关系

一条机器指令对应一个微程序,这个微程序是由若干条指令序列组成,因此,一条机器指令的功能是由若干条微指令组成的序列来实现的。简言之,一条机器指令完成的,操作划分为若干条微指令来完成,由微指令进行解释和执行。

2)  2. 一颗21个节点10层的2叉树,第7层最多有多少个结点。

选8个,从第1层到第10层的个数如:

1 1 1 1 2 4 8 1 1 1

如果;第7层为9的话,则,第6层为>=5,第5层>=3,这3层就>=17, 其他7层最少要有7个结点,那么总数就超过了21了,所以8最大。

3)  虚拟内存的作用,(扩大内存存储速度?扩大内存存储容量?扩大外存存储速度?扩大外存存储容量)?

选择 扩大内存存储容量

4)  x = 793, i = 100 while(!x){ x &= (x - 1); i ^=10; } 则i = ?

首先x=512+128+64+16+2+1,有6个‘1’,所以循环执行6次,而i ^= 10执行6次不变。所以i=100

5)  概率题,10个文件,每个文件传对的概率是90%,3次失败就失败。若成功,则应该传了多少次。

6)  组合题,7个相同的球放到4个不同的盒子里的方法有多少种?

120

分析:

用'#'表示挡板,O表示球,这此问题可以转化成在 'OOOOOOO'中插入3个‘#’的组合的总数,挡板相同。

为什么可以这样:例如:O#O#OOO#OO,这个‘#’把他们分成4个部分,可以看成装在4个不同的盒子里

个数分别是:1 1 3 2, 但盒子可以为空,所以这种也合法:###OOOOOOO,0 0 0 7。

下面来计算这个组合总数:

为了方便写,最左边为0位置,最后边为7位置,中间依次递增,像:OO##O#OOOO, 这3个“#”位置为:2,2,3

当第一个‘#’放在i位置范围 ( 0 = < i <= 7),第二个‘#’可以放在j位置范围(i<= j <=  第3个‘#’可以方的位置范围k(j <= k <= 7)

所以总数为:S=

1+2+3+4+5+6+7+8+

1+2+3+4+5+6+7+

1+2+3+4+5+6+

1+2+3+4+5+

1+2+3+4+

1+2+3+

1+2+

1

= 120

7)  路由的相关概念,(下一跳,目标地址,源地址,路由权值哪个不包含)

 

 

二、编程题

1)  x = (54321),翻转后的值y=(12345),类似x=(-123),翻转后y=(-321)

#include <stdio.h>

 

void reverse(int x, int *y)

{

int sign= 1;

if(x <0)

{

           sign= -1;

           x= -x;

}

*y = 0;

while(x)

{

           *y= *y * 10 + x % 10;

           x/= 10;

}

*y = *y *sign;

}

 

int main()

{

int x1 =54321;

int x2 =-123;

int *y1;

int *y2;

reverse(x1,y1);

reverse(x2,y2);

 

printf("beforereverse:%d; after reverse:%d\n", x1, *y1);

printf("beforereverse:%d; after reverse:%d\n", x2, *y2);

return 0;

}

 注意的问题:

考虑全面,就可能会出现溢出的情况,但x的个位数是像大于2之类的数,并且x为10位数时,当翻转的时候就会溢出了,整型最大才21亿多


2)  输入n,k , 打印出第k个排列(1,2,3...n)

如: n = 4, k = 5

1234   1243  1324 1342 1423 1432.....  4321

output:1423

思想:

        初始:i = 0,输入n,k

a)        j = k / (n-i - 1)!;

b)        从[1,2,...,n]中打印第j个,(j=0,..., n-1) 如果前面已经打印了,跳过,这里要有一个标记,那些被打印过了。

c)        k = k%(n-i -1)!

d)        i++;

e)        当 i < n 回到 1 继续执行

 哎!在试卷上这思想没有写的这么清楚,比较乱,表达能力不行啊

3)  一个数轴,给定那条线段,(s,t),s是起点坐标,t是终点坐标,写算法算出总的长度。

参考线段树结构,不过不能直接用,这里的s,t可能是double型

转自:http://blog.csdn.net/dremi/article/details/3076233

atof()函数的实现

阅读更多
个人分类: 笔试
上一篇
下一篇深入分析C++中char * 和char []的区别(转载)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭