腾讯笔试题

注:试题来源于网络资源,仅供交流、讨论和学习。

***********************************************************
腾讯2015校园招聘笔试题(西安):

其中编程题第1题:
36进制转换, 设计函数把10进制 正整数 转换为 4位定长 的36进制字符串。
思路:
1)除36取余
2)迭代,逆序
#define MAX (36*36*36*36-1)
#define N 4
char* conv(int n)
{
                 assert(n>0 && n<=MAX);
                 char*s = new char[N+1];  //最好实参传进来,而不新建
                 for(int i=0;i<N;i++)
                                s[i] = '0';
                 s[N] = '\0';
                 int x = n;
                 int r = 0;
                 int j = 0;
                 while(x!=0)
                 {
                                r = x%36;
                                x = x/36;
                                if(r<10)
                                                s[j] = r + '0';
                                else
                                                s[j] = r - 10 + 'A';
                                j++;
                 }
                 j = N-1;
                 char tmp;
                 for(int i=0;i<j;i++)
                 {
                                tmp = s[i];
                                s[i] = s[j];
                                s[j] = tmp;
                                j--;
                 }
                 return s;
}


***********************************************************
腾讯2014实习生4月20日深圳笔试题:

(一)不定项选择题(25*4)
1.  使用深度优先算法遍历下图,遍历的顺序为()

A ABCDEFG        B ABDCFEG
ABDECFG        D  ABCDFEG

2.  输入序列ABCABC经过栈操作变成ABCCBA,下面哪些是可能的栈操作( )
A.     push pop push pop push pop pushpush push pop pop pop         //ABCCBA
B.     push push push push push push poppop pop pop pop pop        //CBACBA
C.     push push push pop pop pop pushpush pop pop push pop       //CBABAC
D.     push push push push pop pushpop push pop pop pop pop      //ABCCBA

3.  下列关键码序列哪些是一个堆( )
A. 90 31 53 23 16 48                B . 90 48 31 53 16 23
C.  16 53 23 90 31 4                  D.16 31 23 90 53 48

4. 稀疏矩阵压缩的存储方法是:()
A 三元组 B 二维数组 C 散列  D 十字链表

//三元组
typedef  struct
{
                  int  i,j;   //行号,列号
                  int  value;
}triple;

//十字链表
typedef  struct  OLNode{
   int  i,j;   //行号,列号
   int  value;
   struct  OLNode *right,*down;  //指向右边,下面一个非零元素
}OLNode,*Olink;
typedef  struct
{
                Olink *rhead,*chead;  //列表头,行表头
                  int  mu,nu,tu;   //行列尺寸,非零元素个数
}CrossList;


5.  二叉树的后序排列DBEFCA,中序排列DBAECF,那么对其做 先序线索化二叉树,节点E的线索化指向节点()
A  BC        B  AC        C  DF          D CF

6. 线性结构的是()
A 串  B 链式存储栈  C顺序存储栈 D 顺序存储二叉树

8. Unix系统中,适合任意两个进程通信的是()
A FIFO  B  PIPE   C Message Queue   D  share memory

9. Windows系统中,不适合进程通讯的是()
A 临界区 B 互斥量 C 信号量 D 事件

10.  下面的内存管理模式中,会产生外零头的是()
A 页式  B段式C 请求页式  D 请求段式
 //参考 http://cc.sjtu.edu.cn/os/res/res6-5.asp 

11.  Linux执行ls,会引起哪些 系统调用()
A nmap B read C execve D fork

14. 对于以下代码,char * p= new char[100]
A p 和 new出来的内存都在栈上
B p 和 new出来的内存都在堆上
C p在栈上 new出来的在堆上
D p在堆上 new出来的在栈上

15 进程A读取B进程中的某个变量(非共享内存),可行的方式()
A 进程向消息队列写入一个包含变量内容的消息,B进程从队列中读出
B 通过本地环路通信
C 如果A、B 非亲属,那么A通过命名管道把这个变量的地址发给B进程
D 如果 B是A 进程,那么B直接读取变量内容即可

16 使用 send发送大量小的数据包,说法正确的是()
A 带宽利用率低 B 网卡吞吐很高 C 网卡中断频繁 D 进程上下文切换频繁

17. TCP的握手与分手 可能出现的情形是()
A 握手需要3次通信
B 分手需要进行4次通信
C Fin和ACK 在同一包里(这个选项也对)
D ACK 和SYN 在同一包里

19. 新窗口打开网页,以下哪个()
A _self B _blank C _top D _parent

21 版本控制软件是哪些()
A bugzilla B subversion C Git D loadrunner

22 Select A,B from Table1 where A between60 and 100 order by B,下面哪些优化sql性能()
A 字段A 建立hash索引,字段B btree索引
B 字段A 建立hash索引,字段B不建立索引
C字段A 建立btree索引,字段B不建立索引
D 字段A 不建立 索引,字段B建立btree索引

23 数据索引的正确是()
A 1个表只能有一个聚族索引,多个非聚族索引
B 字符串模糊查询不适合索引
C 哈希索引有利于查询字段用于大小范围的比较查询
D 多余的索引字段会降低性能

24 CPU与外设的传输数据的方式是()
A 程序方式 B中断 C DMA D 通道方式

25. 式子7*15=133成立,则用的是几进制()
A  6      B 7       C 8         D 9

(二)填空题
26. MySQL中表test选择10条到20条记录的语句是()

27. 若信号S为9,则S经过15次P和14次V,S为()
8    每P一次减一,没V一次加一。

28. 页面走向:4 3 2 1 4 3 5 4 3 2 1 5 4,当分配的内存物理快数4(开始为装入),采用LRU淘汰算法,产生多少次缺页() 9
LRU:最近最少使用淘汰算法:
缺页为:
4              缺1
4  3          缺1
4  3  2      缺1
4  3  2  1  缺1
3  2  1  4  不缺
2  1  4  3  不缺
1  4  3  5  缺1
1  3  5  4  不缺
1  5  4  3  不缺
5  4  3  2  缺1
4  3  2  1  缺1
3  2  1  5  缺1
2  1  5  4  缺1

29. 评估算法优势,通常从()和()两个方面考察
时间复杂度   空间复杂度

30. G是一个邻接表,以V1为起点,深度优先遍历序列V1V2V3V6V5V4,从V1开始的广度优先遍历序列是()
V1 V2 V5 V4 V3 V6


 31.20*20*20的魔法,8000个小正方体,如果剥取最外一层,还剩下多少个方块()
18*18*18=5832 

32.
(1)如果A投硬币是正面的,B给A  1美金
(2)如果A投的是反面,就再投,为正面,B给A 2美金
(3)如果还是反面,就再投,为正面,B给A 4 美金
(4)假设A投的是反面,就投到正面为止,B就给A 的2的(n-1)次方
如果A、B玩这样的硬币游戏,A至少要给B多少钱B才不会亏钱()

33.左轮枪,左轮枪,有6个弹巢,两颗子弹放进相邻的弹巢,拨动转轮,然后拿着这把枪朝我自己扣动,但我还活着,现在轮到你了,你有两种选择
(1)在扣动一次转轮,把枪对准自己,扣动扳机
(2)不拨动转轮,直接对准自己,扣动扳机
假设你还不想死,你选择哪种()原因()
选第二种     概率1/2>1/4 或者1/3>1/4
第二种爆头的概率为1/4,
第一种的话有两种争论,拨动转轮到底是拨动一格还是拨动一下转n圈,就像电视上面的一样。这两种情况有待商榷,没有抓住出题者的意图。
假设为第一种转动一格。那么还是按照上面的来分析:
现在如果为3,再拨动一格则下一弹巢为5不爆头
现在如果为4,再拨动一格则下一弹巢为6不爆头
现在如果为5,再拨动一格则下一弹巢为1爆头
现在如果为6,再拨动一格则下一弹巢为2爆头
所以这种情况下面爆头概率非常高为1/2
假设为第二种转动n圈,回到随机位置,这种就比较好考虑了,就是6个里面有两个爆头,概率为1/3

附加题:
34.描述mapreduce的执行过程,最好用画图的方式表示。

35.数据库A的ID从20120120300001到20120120399999,更新ID从00001到99999,递增加1,不重复,不间断(并保持高并发的性能)
也不是很清楚当时就写了设置ID为主键,保证其唯一约束。还有就是以日期找到当天是否数据库中已有当天的ID,没有设为00001,
有的话就找到当天最大的那一个然后加1为对应的主键,保持高并发性。

***********************************************************
腾讯2014实习生4月20日杭州(浙大)笔试题:

1.   关于二叉树,下面说法正确的是()
A.  对于N个节点的二叉树,其高度为nlog2n;
B.   一个具有1025个节点的二叉树,其高度范围在11~1025之间
C.  二叉树的先序遍历是EFHIGJK,中序遍历为HFIEJKG,该二叉树的右子树的根为G
D.  二叉树中至少有一个节点的度为2

2.   假设函数f1的时间复杂度O(n),那么f1*f1的时间复杂度为()
A.  O(n)B.   O(n*n)C.  O(n*log(n)) D.  以上都不对

3.   对下列四种排序方法,在排序中关键字比较次数与记录初始化顺序无关的是()
A.  直接排序 B.   二分法插入 C.  快速排序  D.  归并排序
//补充:直接排序应该包括直接选择排序和直接插入排序(一个是交换一个是插入,都是对已有序的部分进行操作)
//有人指出,不应选D,因为合并阶段的比较次数可能因初始化不同而不同
//A如果是直接选择排序,也是对的

4.   已知一段文本有1382个字符,使用了1382个字节存储,这段文本全部是由a、b、c、d、e字符组成,a 354次,b 483次,c 227次,d 96次,e 222次,对这5个字符使用哈夫曼编码。则以下说法正确的是?()
A.  使用哈夫曼编码后,使用编码值来存储这段文本将花费最少的存储空间、
B.   使用哈夫曼编码后,a b c d e 这5个字符对应的编码值是唯一确定的
C.  使用哈夫曼编码后,a b c d e 这5个字符对应的编码值可以有多套,但每个字符的编码位数是确定的
D.  b这个字符的编码位数最短,d这个字符的哈夫曼编码位数应该最长
选A,C,D

5.   判断单链表有没有环的算法中,至少需要几个指针()
A.  1 B.    2 C.  3 D.  4

6.   在编译过程中,产生Parse  tree的过程是()
A.  语法分析 B.   语义分析阶段C.  词法分析D.  目标代码生成阶段

7.   阅读下面代码,程序会打印出来的值是()
#include
Void f(char **p){
                *p += 2;
}
Void main() {
                Char *a[] = { “123”,”abc”,”456”},**p;
                p = a;
                f(p);
                printf(“%s\r\n”,**p);
}

  A.  123  B.   abc  C.  456   D.  3 

8.   Char p1[] = “Tencent”, void * p2 = malloc((10)在32位机器上sizeof(p1)和sizeof(p2)对应的值是()
A.  8:0 B.   4:10 C.  8:4 D.  4:4

9.   现在有以下两个函数,调用test的结果是()

Char* getMem(void) {      Char * p = “hello world ”;
      P[5] = 0x0;
      Return p;
}
Voidtest(void) {      Char *s = 0x0;
      s = getMem();
      Printf(s);
}
 
A.  hello B.   无输出 C.  Hello0world  D.  不确定

10.  冯诺依曼体系结构计算机的基本原理是()
A信息存储  B 存储智能 C 数字控制  D 存储程序和程序控制 


11、下面代码中析构函数(1)和(2)的调用顺序是:()
class base{
        public :
        ~base(){}              //(1)
};      
class child: public base {
        public :
        ~child(){}              //(2)
};  
int main(){
       base *b = new child();
       delete b;
}
A. 先调用(1)再调用(2)                                B.先调用(2)再调用(1) 
C. 只调用(1)                                             D. 只调用(2)

12.下面哪种设计模式的定义为:定义对象间的一种一对多的关系,当一个对象改变时,其他依赖于他的对象都能够得到通知并自动更新。()
A.  Visitor B.   Adapter  C.  Observer D.  Interpreter

13.请看一下这一段C++代码,如果编译后程序在windows下运行,则一下说话正确的是()
Char*p1 = “123456”;
Char*p2 = (char*)malloc(10);
A.  P1 he p2都存在栈中
B.   P2指向的10个字节内存在栈中(在堆中)
C.  堆和栈在内存中的生长方向是相反的(堆一般用空闲链表管理)
D.  “123456”这6个字符存储在栈中(在常量存储区)

14.将3个球随机放入4个杯子中,则杯子中球的最大个数为2的概率是()
A.  9/16 B.   3/4 C.  3/8 D.  3/16

15.对n个元素的数组进行快速排序,所需要的二外空间为()
A.  O(1)B.   O(n)C.  O(log(2n)D.  O(n^2))
未考虑递归调用栈。

16.下面关于编译器与解释器的观点,错误的是()
A.  解释器不产生目标程序,它直接执行源程序或者源程序的内部形式
B.   解释程序和编译程序的主要区别在于是否产生目标程序
C.  编译器对高级语言程序的处理过程划分成词法分析、语法分析、语义分析,中间代码生成、代码优化、目标代码生成几个阶段
D.  解释器参与运行控制、程序执行的速度快

17.假设系统中有5太设备,有多个进程需要使用2个设备,假定每个进程一次只能使用一台,则至多允许多少个进程来竞争这5个资源,而不会发生死锁()
A.  2 B.   3   C.  4  D.  5


18.下面哪些协议,存在源端口和目的端口是()
A.  IP  B.   TCP C.  UDP D.  ICMP协议

19.下列哪些sql是等价的()
A.  Select A.tname ,A.depart from teacher A joincourse B on B.tno = .A.tno
B.   Select A.tname ,A.depart from teacher A whereA.tno = course.tno
C.  Select A.tname ,A.depart from teacher wheretno in (select tno from course)
D.  Select A.tname ,A.depart from teacher where exsist (select * from course B where B.tno = A.tno);

20.某一磁盘请求序列(磁道号):98、 183、 37、122、14、124、 65、 61,按照先来先服务FCFS磁盘调度对磁盘进行请求服务,假设当前磁头在53道上,则磁臂总移动道数为:()
A、169         B、208         C、640         D、236

21.将一个C类网络划分为3个子网,每个子网最少要容纳55台主机,使用的子网掩码是:()
A、255.255.255.248   B、255.255.255.224  C、255.255.255.224   D、255.255.255. 192
*******************************
插入:子网划分
网段的表示:172.16.0.0/16, 16表示网络号比特数
通过向主机号借两个位划分为4个子网:172.16.0.0/18,172.16.64.0/18,172.16.128.0/18,172.16.192.0/18
再用子网掩码代替“/18”这种表示方式,划分网络号和主机号
*******************************

22下列关于计算机硬件的描述,正确的是:()
A、磁盘的平均存取时间指的是磁盘的寻道时间加上磁头在某一磁道等待记录扇区的时间
B、计算机的控制器是由多种部件组成,其中包括,指令寄存器、程序计数器和算数逻辑单元
C、一台计算机的字长是32位,表明该机器能处理的数值最多为4个字节
D、系统总线可以分为数据总线、地址总线和控制总线三类

23、假设有关系模式R(A,B,C,D),其数据依赖集:F={(A,B)- >C,C->D},则关系模式R的规范化程度最高达到:()
A.1NF
B.2NF
C.3NF
D.BCNF

24.以下为一段浏览器中可运行的Javascript 代码,则运行该段Javascript代码的页面弹出框中显示的结果是:()
Var obj = { “key”:”1”,”value”:2};
Var newObj = obj;
newObj.value += obj.key;
alert(obj.value);
A、2           B、12          C、3          D、21

25.有足够量的2分、5分、1分硬币,如果想凑齐一元钱,可以有()种方法
A、541    B、270   C、1024    D、128

填空题(共5题,每题4分,共20分)
26、阅读下面代码:
#defineMAX_NUM 1000+1
int Temp = Max_NUM*10;
则Temp的值为(    )
 1010

27.某个单CPU操作系统抢占式进程调度策略。现在有三个任务T1(优先级高),T2(优先级中),T3(优先级低)同时进入调度队列,每个任务都需要占用CPU时间10ms,10ms,13ms,然后再用CPU时间5ms,则T3从进入调度对了到完成需要( 54)ms(不考虑系统任务调度的开销)

28.在一个采用页式虚拟存储管理的系统中,有一用户作业,它依次要访问的也没序列是1,2,3,4,1,2,5,1,2,3,4,5.假定分配给该作业的页数为3且作业初始时未装载页面,那么采用FIFO调度算法产生的缺页中断数为( 9),采用LRU调度算法产生的缺页中断数为( 10

29.指针的退化!
#include <stdio.h>
class Base
{
public:
virtual int foo(int x){return x*10;}
int foo(char x[14]){return sizeof(x)+10;}
};
class Derived:public Base
{
int foo(int x){return x*20;}
virtual int foo(char x[10]){return sizeof (x)+20;}
};
int main(void)
{
Derived  stDerived;
Base * pstBase=& stDerived;
char x[10];
printf(“%d\n”,pstBase->foo(100)+pstBase->foo(x));
return 0;
}
在32位环境下,以上程序的输出结果是()
2014

附加题(共2题,不计入总分)
31.珠宝商甲需要去鉴定一批41克以下的宝石(可能是41克以下不包括41克的任意重量),他只能携带一个天平和四个砝码去称重,请问他会携带那些重量的砝码?
1,3,9,27

32.UTF-8是现在流行的编码方式,下面是RFC2279对UTF-8编码规则的规定,根据这个规则,中文字符‘我’的unicode值为0X6211,utf-8编码之后为0XE68891。
请回答一下问题:
A)英文字符‘a’,其unicode的十六进制值为0X61,则其UTF-8编码后的十六进制值为?
B)中文字符‘腾’,其unicode的十六进制值为0X817E,则其UTF-8编码后的十六进制值为?
C)中文字符‘讯’,其unicode值经过UTF-8编码之后为0XE8AEAF,则请问其unicode的十六进制值是?

 ***********************************************************
2014腾讯广研面试题:

给你一个int数组,长度为n,数组中存放的是一支股票n天来的价格,请求出在哪天买入,哪天卖出的利润最大,注意只能买卖一次。

解法参见“其子数组的最大和”

 ***********************************************************
 腾讯2011.10.15校园招聘会笔试题:

1、下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的是(B)
A、插入排序                       B、堆排序                    C、冒泡排序                     D、快速排序

这里要注意冒泡排序,虽然简单,但容易忽略一点,它的最好情况下的时间复杂度是O(n)
当某次扫描后发现无需进行任何相邻元素的交换时,表明列表已经有序,可以停止算法了;最好的情况就是输入就是正序的,只需比较n-1次。

2、以下关于Cache的叙述中,正确的是(B)
A、CPU中的Cache容量应大于CPU之外的Cache容量
B、Cache的设计思想是在合理成本下提高命中率
C、Cache的设计目标是容量尽可能与主存容量相等
D、在容量确定的情况下,替换算法的时间复杂度是影响Cache命中率的关键因素

3、数据存储在磁盘上的排列方式会影响I/O服务的性能,一个圆环的磁道上有10个物理块,10个数据记录R1------R10存放在这个磁道上,记录的安排顺序如下表所示:
物理块          1     2     3     4     5     6     7     8     9     10
逻辑记录     R1     R2     R3     R4     R5     R6     R7     R8     R9     R10
假设磁盘的旋转速度为20ms/周,磁盘当前处在R1的开头处,若系统顺序扫描后将数据放入单缓冲区内,处理数据的时间为4ms(然后再读取下个记录),则处理这10个记录的最长时间为(C)
A、180ms                           B、200ms                         C、204ms                             D、220ms
2+4+((2+4)+2*8)*9=204

4、为了节省可分配的注册IP地址,有一些地址被拿出来用于私有IP地址,以下不属于私有IP地址范围的是(C)
A、10.6.207.84                              B、172.23.30.28                     C、172.32.50.80               D、192.168.1.100
私有IP地址不会被Internet分配的,它们在Internet上也不会被路由,可在内容局域网中使用
共有三个范围段:
A:     10.0.0.0~10.255.255.255    B:      172.16.0.0~172.31.255.255  C:   192.168.0.0~192.168.255.255 
10.0.0.0/8  172.16.0.0/12  192.168.0.0/16

5、下列关于一个类的静态成员的描述中,不正确的是(D)
A、该类的对象共享其静态成员变量的值                              B、静态成员变量可被该类的所有方法访问                 
C、该类的静态方法只能访问该类的静态成员变量                 D、该类的静态数据成员变量的值不可修改

6、已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7计算散列地址,并散列存储在散列表A【0....6】中,若采用 线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为(C)
A、1.5                  B、1.7                            C、2.0                       D、2.3
依次进行取模运算求出哈希地址:
A               0     1     2     3     4     5     6
记录          63    48          38   25   74    52
查找次数     1     3           1      1    2      4
等概率查找,所以结果为:1/6*(1+3+1+1+2+4)= 2.0

***************************************************
插入:如何解决冲突
1. 开放定址法:线性探测方法(di=1,2,3,……),二次探测方法(di=1,-1,4,-4,9,-9,……)
2. 再哈希法:当发生冲突时,使用第二个、第三个、哈希函数计算地址,直到无冲突时。缺点:计算时间增加。
3. 链地址法:将所有关键字为同义词的记录存储在同一线性链表中。
(4.)建立一个公共溢出区:假设哈希函数的值域为[0,m-1],则设向量HashTable[0..m-1]为基本表,另外设立存储空间向量OverTable[0..v]用以存储发生冲突的记录。
***************************************************

7、表达式“X=A+B*(C--D)/E”的后缀表示形式可以为(C)
A、XAB+CDE/-*=                     B、XA+BC-DE/*=                       C、XABCD-*E/+=                         D、XABCDE+*/=

8、(B)设计模式将抽象部分与它的实现部分相分离。
A、Singleton(单例)                                       B、 Bridge(桥接)                     
C、 Composite(组合)                                   D、 Facade(外观)

9、下面程序的输出结果为多少?
  1. void Func(char str_arg[100])  
  2. {  
  3.     printf("%d\n",sizeof(str_arg));  
  4. }  
  5.   
  6. int main(void)  
  7. {  
  8.     char str[]="Hello";  
  9.     printf("%d\n",sizeof(str));  
  10.     printf("%d\n",strlen(str));  
  11.     char *p = str;  
  12.     printf("%d\n",sizeof(p));  
  13.     Func(str);  
  14. }  
输出结果为: 6   5     4      4

10、C++将父类的析构函数定义为虚函数,下列正确的是哪个?
A、释放父类指针时能正确释放子类对象
B、释放子类指针时能正确释放父类对象
C、这样做是错误的
D、以上全错

11、下列哪一个不属于关系数据库的特点?
A、数据冗余度小
B、数据独立性高
C、数据共享性好
D、多用户访问

12、下面程序的输出结果为多少?
  1. void Func(char str_arg[2])  
  2. {  
  3.     int m = sizeof(str_arg);     //指针的大小为4  
  4.     int n = strlen(str_arg);     //对数组求长度,str_arg后面的那个2没有任何意义,数组已经退化为指针了  
  5.     printf("%d\n",m);  
  6.     printf("%d\n",n);  
  7. }  
  8. int main(void)  
  9. {  
  10.     char str[]="Hello";  
  11.     Func(str);  
  12. }  
输出结果为:       4         5

13、typedef char *String_t; 和 #define String_d char * 这两句在使用上有什么区别?
答:typedef char *String_t 定义了一个新的类型别名, 有类型检查;
而#define String_d char * 只是做了个简单的替换,无类型检查;
前者在编译的时候处理,后者在预编译的时候处理。
同时定义多个变量的时候有区别,主要区别在于这种使用方式String_t  a,b;  String_d  c,d;     a,b ,c都是char*类型,而d为char类型
由于typedef还要做类型检查。。#define没有。。所以typedef比#define安全。。

14、到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?

15、题目:已知rand7() 可以产生 1~7 的7个数(均匀概率),利用rand7()  产生rand10()   1~10(均匀概率)
记住这道题重点是:均匀概率

***********************************************************
解:http://blog.csdn.net/majianfei1023/article/details/7249918
int  rand10v1()
{
                  int  n;
                  do
                {
                                n = 7*(rand7()-1) + rand7();
                }  while (n>40);
                  return  n%10+1;
}

int  rand10v2() 
     int  temp1; 
     int  temp2; 
     do  
    { 
        temp1 = rand7(); 
    }  while (temp1>5); 
     do  
    { 
        temp2 = rand7(); 
    }  while (temp2>2); 
     return  temp1+5*(temp2-1); 
思考:将版本1改为如下,可以吗
                  do
                {
                                n = 3*(rand7()-1) + rand7();
                }  while  (n>20);
从实验和数学都容易证明是不可以的。只有两次随机都去1是才返回1,而返回4有两种情况,两次随机依次取1、4或2、1;
为避免这种情况,乘积项的系数必须和加数项的范围一致;这样来看,版本1和版本2其实没有多大的区别;而且版本2是刚好碰到偶数,奇数的话就不能实现。
***********************************************************

16、给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。

17、对一个正整数作如下操作:如果是偶数则除以2,如果是奇数则加1,如此进行直到1时操作停止,求经过9次操作变为1的数有多少个?(这种题目知道倒推,减治就行)
第9次操作:结果1由2产生。1个被操作数
8:结果2只能由4产生。1个被操作数
7:结果4由8、3产生。2个
6:结果8由16、7产生;结果3由6产生。共3个
5:结果16由32、15产生;结果7由14产生;结果6由12、5产生。共5个…
每次操作,偶数(2除外)都由该数减1和该数的2倍得来,奇数只由该数的2倍得来
各次操作的操作对象个数为:1,1,2,3,5,8,13,21,34,…
本题可以通过所给的变换规律,由易到难,确定操作可变为1的数组成斐波拉契数列,再根据所发现的规律求出经过9次操作变为1的数的个数。

18、OFFSETOF(s, m)的宏定义,s是结构类型,m是s的成员,求m在s中的偏移量。
#define OFFSETOF(s,m) ((int)&(((s*)0)->m))  
***********************************************************
http://hi.baidu.com/tian_20032242/item/d43ee03be44a6ab8623affc2
#define  OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
       ANSI C标准允许任何值为0的常量被强制转换成任何一种类型的指针,并且转换结果是一个NULL指针,因此((s*)0)的结果就是一个类型为s*的NULL指 针。如果利用这个NULL指针来访问s的成员当然是非法的,但&(((s*)0)->m)的意图并非想存取s字段内容,而仅仅是计算当结构 体实例的首址为((s*)0)时m字段的地址。聪明的编译器根本就不生成访问m的代码,而仅仅是根据s的内存布局和结构体实例首址在编译期计算这个(常 量)地址,这样就完全避免了通过NULL指针访问内存的问题。
***********************************************************

算法编程题:
1、给定一个字符串,求出其 最长的重复子串
思路:使用后缀数组,对一个字符串生成相应的后缀数组后,然后再排序,排完序依次检测相邻的两个字符串的开头公共部分。

***********************************************************
腾讯2014校园招聘软件开发类笔试试题


考试时长:120分钟
一 不定项选择题(共25题,每题4分,共100分,少选、错选、多选均不得分)
1 已知一棵二叉树,如果先序遍历的节点顺序是:ADCEFGHB,中序遍历是:CDFEGHAB,则后序遍历结果为:(D)
A.CFHGEBDA   B.CDFEGHBA   C.FGHCDEBA    D.CFHGEDBA

方法总结:由先序确定根,利用根在中序中将节点分在左右两个子树
根A-右子树B-左子树根D-其右子树C-…

2 下列哪两个数据结构,同时具有较高的查找和删除性能?(CD)
A.有序数组     B.有序链表      C.AVL树        D.Hash表

3 下列排序算法中,哪些时间复杂度不会超过nlogn?(BC)
A.快速排序      B.堆排序        C.归并排序      D.冒泡排序

4 初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:(A)
A.8 3 2 5 1 6 4 7
B.3 2 8 5 1 4 6 7
C.3 8 2 5 1 6 7 4
D.8 2 3 5 1 4 7 6

5 当n=5时,下列函数的返回值是:(A)
int foo(int n) 
    if(n<2)return n; 
    return foo(n-1)+foo(n-2); 
A.5           B.7               C.8             D.10
6  S市A,B共有两个区,人口比例为3:5,据历史统计A的犯罪率为0.01%,B区为0.015%,现有一起新案件发生在S市,那么案件发生在A区的可能性有多大?(C)
A.37.5%       B.32.5%           C.28.6%          D.26.1%

7  Unix系统中,哪些可以用于进程间的通信?(BCD)
A.Socket        B.共享内存       C.消息队列       D.信号量

8 静态变量通常存储在进程哪个区?(C)
A.栈区        B.堆区            C.全局区         D.代码区

9 查询性能(B)
A. 在Name字段上添加主键
B. 在Name字段上添加索引
C. 在Age字段上添加主键
D. 在Age字段上添加索引

10  IP地址131.153.12.71是一个(B)类IP地址。
A.A            B.B             C.C               D.D

11 下推自动识别机的语言是:(C)
A. 0型语言    B.1型语言       C.2型语言         D.3型语言

12 下列程序的输出是:(D)
#define add(a+b) a+b 
int main() 
    printf(“%d\n”,5*add(3+4)); 
    return 0; 
A.23           B.35            C.16               D.19

13 浏览器访问某页面,HTTP协议返回状态码为403时表示:(B)
A 找不到该页面
B 禁止访问
C 内部服务器访问
D 服务器繁忙

14 如果某系统15*4=112成立,则系统采用的是(A)进制。
A.6            B.7             C.8               D.9

15 某段文本中各个字母出现的频率分别是{a:4,b:3,o:12,h:7,i:10},使用哈夫曼编码,则哪种是可能的编码:(A)
A  a(000)  b(001)  h(01)  i(10)  o(11)
B  a(0000)  b(0001)  h(001)  o(01)  i(1)
C  a(000)  b(001)  h(01)  i(10)  o(00)
D  a(0000)  b(0001)  h(001)  o(000)  i(1)

16  TCP和IP分别对应了OSI中的哪几层?(CD)
A  Application layer
B  Presentation layer
C  Transport layer
D  Network layer

17 一个栈的入栈序列是A,B,C,D,E,则栈的不可能的输出序列是?(C)
A.EDCBA          B.DECBA           C.DCEAB       D.ABCDE

18 同一进程下的线程可以共享以下?(BD)
A. stack            B.data section        C.register set      D.file fd

19 对于派生类的构造函数,在定义对象时构造函数的执行顺序为?(D)
1:成员对象的构造函数
2:基类的构造函数
3:派生类本身的构造函数
A.123             B.231               C.321            D.213

20 如何减少换页错误?(BC)
A  进程倾向于占用CPU
B  访问局部性(locality of reference)满足进程要求
C  进程倾向于占用I/O
D  使用基于最短剩余时间(shortest remaining time)的调度机制

21 递归函数最终会结束,那么这个函数一定?(B)
A 使用了局部变量
B 有一个分支不调用自身
C 使用了全局变量或者使用了一个或多个参数
D 没有循环调用

22 编译过程中,语法分析器的任务是(B)
A分析单词是怎样构成的
B 分析单词串是如何构成语言和说明的
C 分析语句和说明是如何构成程序的
D 分析程序的结构

23 同步机制应该遵循哪些基本准则?(ABCD) 
A.空闲让进        B.忙则等待        C.有限等待        D.让权等待

24 进程进入等待状态有哪几种方式?(D)
A CPU调度给优先级更高的线程  (就绪)
B 阻塞的线程获得资源或者信号   (就绪)
C 在时间片轮转的情况下,如果时间片到了  (也是就绪)
D 获得spinlock未果

25 设计模式中,属于结构型模式的有哪些?(BC)
A  状态模式        B  装饰模式        C 代理模式       D 观察者模式

二、填空题(共4题10个空,每空2分,共20 分)
1 设有字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},请写出按二路归并方法对该序列进行一趟扫描后的结果为
DQFXAPBNMYCW

2 关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照关键码值递增的次序进行排序,若采用初始步长为4的Shell的排序法,则一趟扫描的结果是 QACSQDFXRHMY;若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX。

3 二进制地址为011011110000,大小为(4)10和(16)10块的伙伴地址分别为:_________,_________。

4 设t是给定的一棵二叉树,下面的递归程序count(t)用于求得:二叉树t中具有非空的左、右两个儿子的结点个数N2;只有非空左儿子的个数NL;只有非空右儿子的结点个数NR和叶子结点个数N0。N2,NL,NR、N0都是全局量,且在调用count(t)之前都置为0。

typedef struct node 
    int data; 
    struct node *lchild,*rchild; 
}node; 
int N2,NL,NR,N0; 
void count(node *t) 
    if (t->lchild!= NULL) 
         if (t->rchild!= NULL) N2++; 
        else NL++; 
    else  if (t->rchild!=NULL) NR++; 
    else  N0++; 
    if(t->lchild!=NULL)  count(t->lchild)
    if(t->rchild!=NULL)  count(t->rchild)
}/* call form :if(t!=NULL) count(t);*/ 

三、其他方向简答题(共2题,每题20分),选作题,不计入总分)
1 请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出;当有人退出影响到用户的位置排名时需要及时反馈到用户。

2 A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效。
思路:
1)预排序,比较
2)哈希
3)前面两种方法比较容易想到,还有一种方法参考: http://blog.csdn.net/jie1991liu/article/details/13168255
第一步:查找各自的最大值与最小值;
第二步:利用最大值与最小值确定共同的区间范围,排除区间外的数;
第三步:判断最大值与最小值在不在交集中,然后加入或剔除,接着用减治的思想重复第一步和第二步。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值