腾讯笔试题(一、二)(精选8篇)由网友“小熊吃浆果”投稿提供,以下是小编给大家整理的腾讯笔试题(一、二),欢迎大家前来参阅。
篇1:腾讯笔试题(一、二)
腾讯的流程是一笔和四面。前三次面试都是技术面,hr面基本不刷人。笔试成绩决定面试顺序。技术面可能要写代码,做智力题目。
主要是c/c++、数据结构、操作系统等方面的基础知识。好像有sizeof、树等选择题。填空题是补充完整程序。附加题有写算法的、编程的、数据库sql语句查询的。还有一张开放性问题。
1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。
int const shift = sizeof(int)*8-1;
unsigned mask = (0x1
max_num = b;
else
max_num = a;
#define Max(a,b) ( a/b)?a:b
2.如何输出源文件的标题和目前执行行的行数
int line= __LINE__;
char *file = __FILE__;
cout<<“file name is ”<<(file)<<“,line is ”< 3.两个数相乘,小数点后位数没有限制,请写一个高精度算法与大数相乘原理一样,只是调整小数点位置,即有效小数个数
算法提示:
输入 string a, string b;计算string c=a*b; 返回 c;
1,纪录小数点在a,b中的位置l1,l2,则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;
2, 去掉a,b中的小数点,
(a,b小数点后移,使a,b变为整数)
3,计算c=a*b;
(要么用java的BigInterger搞, 要么自己用C++写高精度数乘法,超过百万位,用FFT,我就不细说,这都预先写过就别做了
)
4,输出c
(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)
4.写一个病毒
while (1)
{
int *p = new int[10000000];
}
上面这个不对,没有传染性,寄生性……
5.不使用额外空间,将 A,B两链表的元素交叉归并将树序列化转存在数组或 链表中
struct st{
int i;
short s;
char c;
};
sizeof(struct st);
8
char * p1;
void * p2;
int p3;
char p4[10];
sizeof(p1...p4) =?
4,4,4,10
5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。
最小堆
二分查找
快速排序
双向链表的删除结点
6、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
基础题有15道选择和2道读程序填空。选择题的确是很基础,主要考数据结构,还有一些体系结构、数据库的题目;读程序题跟我们平时考试的差不多,一道是两个升序链合并成一个升序链+递归,一道是四色着色方案附加题有几道没有看清楚。有一道是unix防僵死算法,最后一道是sql查询,还有几道忘了,其中一个是很长的程序题。
发信人: charly (查理一世), 板面: Work
标 题: 腾讯笔试题
发信站: 飘渺水云间 (Sat Nov 11 10:55:33 ), 转信
15个选择题,60分
一个程序填空,40分
三道附加题60分
附加题考的是
1、不用第三个变量实现两个整形变量的交换linux的子进程操作系统资源抢占管理,两个进程要对文件进行独占访问,采用共享变量,判断可行否
2、书写strcpy
时间两个小时,选择题 15*4
然后是程序填空题 10 (2*5), 30 (10*3)
附加题用c++ 实现一个链地址hash。
程序填空题我就不说了,比较easy的说,值得一提的是选择题。
绝大部分考的是C++,我大致说下主要部分吧:
涉及程序执行压栈的: 1道
涉及容器和迭代器的: 4道
涉及虚拟函数以及dynamic_cast的 3道
涉及参数传递的 1道
简单的程序段落判断 2道
涉及类的静态成员赋值的 1道
剩下的是杂七杂八的。不管怎么说,假如你把c++ primer 仔细阅读了一遍,基本上没问题。考的有些细,没有涉及算法和编译等知识,所以我同屋一个兄弟很郁闷,因为他linux底层比较好,本来报的是后台开发,哪知道结果考这种类型的题目。程序填空的考了文件操作,以及数组移动等。附加题比较简单的说,只要把数据结构的hash部分好好看,然后用class组装一下就ok了。
最后祝大家好运,今年腾讯计划50%的是校园招聘,感觉很不多
篇2:腾讯笔试题(一、二)
一些腾讯笔试题及其答案
声明:题目来自网络,答案大部分来自网络并经过整理;有些是自己查资料和请教他人得来的。
1.1、有A、B、C、D四个人,要在夜里过一座桥。
他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。
请问,如何安排,能够在17分钟内这四个人都过桥?
答案:A & B -->2 mins
1 mins <-- A
C & D -->10 mins
2 mins <-- B
A & B -->2 mins
一共 2 + 1 + 10 + 2 + 2 = 17 mins
1.2 、1-20的两个数把和告诉A,积告诉B,A说不知道是多少,
B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少?
答案:2和3
答案有3个:
1 2和2
2 2和3
3 2和4
第一个大概是(2,2)吧
A得到的是2+2=4,B得到的是2*2=4
开始A当然不知道,因为有可能是(2,2)或(1,3)
这时B也不知道,因为有可能是(2,2)或(1,4),而且这两种情况A无均会答“不知道”
这时,我就已经知道了,因为如果是(1,3),B得到的是3,只有(1,3)这种情况,就不会回答“不知道”
由B的答案,A可以肯定是(2,2)
同样,A说“知道”了以后,B也就知道了
因为如果是(1,4),A得到的是5,只凭第二步B说“不知道”,A不可能在第三步便“知道”
所以B可以断定,是(2,2)
逻辑推理:这两个数是多少?
两个人A,B。数字为2-100之间的自然数。现找出两个数,把其和告诉A,把其积告诉B。然后问A知道不知道是哪两个数,A说:“虽然我
不知道,但是肯定B也不知道。” 再问B,B说:“本来我不知道,但是听到A说这句话,现在我知道了。”,A听到B说他知道了,然后就说:
“现在我也知道了”。那么这两个数是多少呢?
由A说:“虽然我不知道,但是肯定B也不知道。”得:和不是两个素数的和
得出以下数字:
11,17,23,27,29,35,37,41,47,51,53,57,59。。。。。等
通过以上列出的和,推出积的可能性:
和-》积
11-》18,24,28,30
17-》30,42,52,60,66,70,72
23-》42,60,76,90,102,112,120
27-》50,72,92,110,126,140,152。。。。
29-》54,78,100,120,115,138,154。。。。
35-》66,96,124,150,174,196。。。。
根据“B说:“本来我不知道,但是听到A说这句话,现在我知道了。” ”我们首先可以删除一些重复出现的积,如30,120
得到:
11-》18,24,28,
17-》52,
23-》42,76,
27-》50,92。。。
29-》54,78。。。。
35-》96,124。。。
由“A对B说:呵呵,我也知道了。”可以知道积是唯一的,那只有52了
所以得到和是17,积是52
答案就是4和13。
1.3 、爸爸,妈妈,妹妹,小强,至少两个人同一生肖的概率是多少?
1-12*11*10*9/12*12*12*12 = 1-55/96 = 41/96
1.4 某人去玩具店买小熊,单价30元. 付给玩具店老板100元玩具店老板没零钱,
去水果店换了100元零钱回来找给那人70元. 那人走后, 水果店老板找到玩具店老板说刚才的100元是假币,
玩具店老板赔偿了水果店老板100元
问:玩具店老板损失了多少钱?
答案: 70+小熊的进价
2 请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
答案:
#define max(a,b) ((((long)((a)-(b)))&0x80000000)?b:a)
若a >b ,则a-b的二进制最高位为0,与上任何数还是0,所以大数为a;
否则,a-b为负数,二进制最高位为1,与上0x80000000(最高位为1其他为0)之后为1,所以此时的大数为b.
3 计算 a^b << 2
答案:
运算符优先级:括号,下标,->和.(成员)最高;
单目的比双目的高;
算术双目的比其他双目的高;
位运算 高于 关系运算;
关系运算 高于 按位运算(与,或,异或);
按位运算 高于 逻辑运算;
三目的只有一个 条件运算,低于逻辑运算;
赋值运算仅比 , (顺序运算)高。
在此题中,位左移“<<” 优先级高于按位异或“^”,所以b先左移两位(相当于乘以4),再与a异或。
例如: 当 a = 6; b = 4 时; 则 a^b<<2 = 22
4、如何输出源文件的标题和目前执行行的行数?
答案: printf(“The file name: %dn”, __FILE__);
printf(“The current line No:%dn”, __LINE__);
ANSI C标准预定义宏:
__LINE__
__FILE__
__DATE__
__TIME__
__STDC__ 当要求程序严格遵循ANSI C标准时该标识符被赋值为1
__cplusplus__ 当编写C++程序时该标识符被定义
5、a[3][4]哪个不能表示 a[1][1]: *(&a[0][0]+5) *(*(a+1)+1) *(&a[1]+1) *(&a[0][0]+4)
答案: *(*(a+1)+1)
a是数组的首地址,a+1相当于&a[0][1], *(a+1)=a[0][1],则*(*(a+1)+1)= *(a[0][1] + 1) =/= a[1][1]
6、fun((exp1,exp2),(exp3,exp4,exp5))有几个实参?
答案:两个。
形式参数:在声明和定义函数时,写在函数名后的括号中的参数。
实参是调用参数中的变量,行参是被调用函数中的变量。
7、希尔 冒泡 快速 插入 哪个平均速度最快?
答案:快速排序
快速排序、归并排序
[腾讯笔试题(一、二)]
篇3:关于腾讯笔试题
部分IT公司笔试算法题
1、将一整数逆序后放入一数组中(要求递归实现)
void convert(int *result, int n) {
if(n>=10)
convert(result+1, n/10);
*result = n%10;
}
int main(int argc, char* argv[]) {
int n = 123456789, result[20] = { };
convert(result, n);
printf(“%d:”, n);
for (int i = 0; i < 9; i++)
printf(“%d”, result);
}
2、求高于平均分的学生学号及成绩(学号和成绩人工输入)
double find(int total, int n) {
int number, score, average;
scanf(“%d”, &number);
if(number != 0) {
scanf(“%d”, &score);
average = find(total+score, n+1);
if(score >= average)
printf(“%d:%d ”, number, score);
return average;
} else {
printf(“Average=%d ”, total/n);
return total/n;
}
}
int main(int argc, char* argv[]) {
find(0, 0);
}
3、递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
int find(char *str, int n) {
if(n<=1) return 1;
else if(str[0]==str[n-1]) return find(str+1, n-2);
else return 0;
}
int main(int argc, char* argv[]) {
char *str = “abcdedcba”;
printf(“%s: %s ”, str, find(str, strlen(str)) ? “Yes” : “No”);
}
4、组合问题(从M个不同字符中任取N个字符的所有组合)
void find(char *source, char *result, int n) {
if(n==1) {
while(*source)
printf(“%s%c ”, result, *source++);
} else {
int i, j;
for(i=0; source != 0; i++);
for(j=0; result[j] != 0; j++);
for(; i>=n; i--) {
result[j] = *source++;
result[j+1] = ;
find(source, result, n-1);
}
}
}
int main(int argc, char* argv[]) {
int const n = 3;
char *source = “ABCDE”, result[n + 1] = { 0 };
if (n >0 && strlen(source) >0 && n< = strlen(source))
find(source, result, 3);
}
5、分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
void prim(int m, int n) {
if(m>n) {
while(m%n != 0) n++;
m /= n;
prim(m, n);
printf(“%d*”, n);
}
}
int main(int argc, char* argv[]) {
int n = 435234;
printf(“%d=”, n);
prim(n, 2);
}
6、寻找迷宫的一条出路,o:通路; X:障碍。(大家经常谈到的一个小算法题)
#define MAX_SIZE 8
int H[4] = {0, 1, 0, -1};
int V[4] = { -1, 0, 1, 0 };
char Maze[MAX_SIZE][MAX_SIZE] = { { X, X, X, X, X, X, X, X }, {
o, o, o, o, o, X, X, X }, { X, o, X, X, o,
o, o, X }, { X, o, X, X, o, X, X, o }, { X,
o, X, X, X, X, X, X }, { X, o, X, X, o, o,
o, X }, { X, o, o, o, o, X, o, o }, { X, X,
X, X, X, X, X, X } };
void FindPath(int X, int Y) {
if (X == MAX_SIZE || Y == MAX_SIZE) {
for (int i = 0; i < MAX_SIZE; i++)
for (int j = 0; j < MAX_SIZE; j++)
printf(“%c%c”, Maze[j], j < MAX_SIZE - 1 ? : );
} else
for (int k = 0; k < 4; k++)
if (X >= 0 && Y >= 0 && Y < MAX_SIZE&& X < MAX_SIZE && o
== Maze[X][Y]) {
Maze[X][Y] = ;
FindPath(X + V[k], Y + H[k]);
Maze[X][Y] = o;
}
}
int main(int argc, char* argv[]) {
FindPath(1, 0);
}
7、随机分配座位,共50个学生,使学号相邻的同学座位不能相邻(早些时候用C
#写的,没有用C改写)。
static void Main(string[] args)
{
int Tmp = 0, Count = 50;
int[] Seats = new int[Count];
bool[] Students = new bool[Count];
System.Random RandStudent=new System.Random;
Students[Seats[0]=RandStudent.Next(0,Count)]=true;
for(int i = 1; i < Count; ) {
Tmp=(int)RandStudent.Next(0,Count);
if((!Students[Tmp])&&(Seats[i-1]-Tmp!=1) && (Seats[i-1] - Tmp) != -1) {
Seats[i++] = Tmp;
Students[Tmp] = true;
}
}
foreach(int Student in Seats)
System.Console.Write(Student + “ ”);
System.Console.Read();
}
8、求网格中的黑点分布。现有6*7的网格,在某些格子中有黑点,已知各行与各列中有黑点的点数之和,请在这张网格中画出黑点的位置。(这是一网友提出的题目,说是他笔试时遇到算法题)
#define ROWS 6
#define COLS 7
int iPointsR[ROWS] = {2, 0, 4, 3, 4, 0}; // 各行黑点数和的情况
int iPointsC[COLS] = { 4, 1, 2, 2, 1, 2, 1 }; // 各列黑点数和的情况
int iCount, iFound;
int iSumR[ROWS], iSumC[COLS], Grid[ROWS][COLS];
int Set(int iRowNo) {
if (iRowNo == ROWS) {
for (int iColNo = 0; iColNo < COLS && iSumC[iColNo] == iPointsC[iColNo]; iColNo++)
if (iColNo == COLS - 1) {
printf(“ No.%d: ”, ++iCount);
for (int i = 0; i < ROWS; i++)
for (int j = 0; j < COLS; j++)
printf(“%d%c”, Grid[j], (j + 1) % COLS ? : );
iFound = 1; // iFound = 1,有解
}
} else {
for (int iColNo = 0; iColNo < COLS; iColNo++) {
if (iPointsR[iRowNo] == 0) {
Set(iRowNo + 1);
} else if (Grid[iRowNo][iColNo] == 0) {
Grid[iRowNo][iColNo] = 1;
iSumR[iRowNo]++;
iSumC[iColNo]++;
if (iSumR[iRowNo] < iPointsR[iRowNo] && iSumC[iColNo]
<= iPointsC[iColNo])
Set(iRowNo);
else if (iSumR[iRowNo] == iPointsR[iRowNo] && iRowNo < ROWS)
Set(iRowNo + 1);
Grid[iRowNo][iColNo] = 0;
iSumR[iRowNo]--;
iSumC[iColNo]--;
}
}
}
return iFound; // 用于判断是否有解
}
int main(int argc, char* argv[]) {
if (!Set(0))
printf(“Failure!”);
}
9、有4种面值的邮票很多枚,这4种邮票面值分别1, 4, 12, 21,现从多张中最多任取5张进行组合,求取出这些邮票的最大连续组合值。(据说是华为校园招聘笔试题)
#define N 5
#define M 5
int k, Found, Flag[N];
int Stamp[M] = { 0, 1, 4, 12, 21 };
// 在剩余张数n中组合出面值和Value
int Combine(int n, int Value) {
if (n >= 0 && Value == 0) {
Found = 1;
int Sum = 0;
for (int i = 0; i < N && Flag != 0; i++) {
Sum += Stamp[Flag];
printf(“%d ”, Stamp[Flag]);
}
printf(“ Sum=%d ”, Sum);
} else
for (int i = 1; i < M && !Found && n >0; i++)
if (Value - Stamp >= 0) {
Flag[k++] = i;
Combine(n - 1, Value - Stamp);
Flag[--k] = 0;
}
return Found;
}
int main(int argc, char* argv[]) {
for (int i = 1; Combine(N, i); i++, Found = 0)
;
}
10、大整数数相乘的问题。(这是在一考研班上遇到的算法题)
void Multiple(char A[], char B[], char C[]) {
int TMP, In=0, LenA=-1, LenB=-1;
while(A[++LenA] != );
while(B[++LenB] != );
int Index, Start = LenA + LenB - 1;
for(int i=LenB-1; i>=0; i--) {
Index = Start--;
if(B != 0) {
for(int In=0, j=LenA-1; j>=0; j--) {
TMP = (C[Index]-0) + (A[j]-0) * (B - 0) + In;
C[Index--] = TMP % 10 + 0;
In = TMP / 10;
}
C[Index] = In + 0;
}
}
}
int main(int argc, char* argv[]) {
char A[] = “21839244444444448880088888889”;
char B[] = “38888888888899999999999999988”;
char C[sizeof(A) + sizeof(B) - 1];
for (int k = 0; k < sizeof(C); k++)
C[k] = 0;
C[sizeof(C) - 1] = ;
Multiple(A, B, C);
for (int i = 0; C != ; i++)
printf(“%c”, C);
}
11、求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)
int GetSubString(char *strSource, char *strResult) {
int iTmp=0, iHead=0, iMax=0;
for(int Index=0, iLen=0; strSource[Index]; Index++) {
if(strSource[Index] >= 0 && strSource[Index] <= 9 &&
strSource[Index-1]>0 && strSource[Index] == strSource[Index-1]+
[关于腾讯笔试题]
篇4:腾讯笔试题
腾讯笔试题
腾讯是国内数一数二的IT企业了,那么每年想要进入腾讯公司的应聘者也是络绎不绝。那么一个好的笔试答卷绝对是脱颖而出的亮点。现在就来看看腾讯笔试题都有哪些内容吧。
腾讯笔试题:const的含义及实现机制
const的含义及实现机制,比如:const int i,是怎么做到i只可读的?
const用来说明所定义的变量是只读的。
这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。
腾讯笔试题:买200返100优惠券,实际上折扣是多少?
到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?
由于优惠券可以代替现金,所以可以使用200元优惠券买东西,然后还可以获得100元的优惠券。
假设开始时花了x元,那么可以买到 x + x/2 + x/4 + ...的东西。所以实际上折扣是50%.(当然,大部分时候很难一直兑换下去,所以50%是折扣的上限)
如果使用优惠券买东西不能获得新的优惠券,那么
总过花去了200元,可以买到200+100元的商品,所以实际折扣为 200/300 = 67%.
腾讯笔试题:tcp三次握手的过程,accept发生在三次握手哪个阶段?
accept发生在三次握手之后。
第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。
三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。
腾讯笔试题:用UDP协议通讯时怎样得知目标机是否获得了数据包
用UDP协议通讯时怎样得知目标机是否获得了数据包?
可以在每个数据包中插入一个唯一的ID,比如timestamp或者递增的int。
发送方在发送数据时将此ID和发送时间记录在本地。
接收方在收到数据后将ID再发给发送方作为回应。
发送方如果收到回应,则知道接收方已经收到相应的数据包;如果在指定时间内没有收到回应,则数据包可能丢失,需要重复上面的过程重新发送一次,直到确定对方收到。
腾讯笔试题:统计论坛在线人数分布
求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。
一天总共有 3600*24 = 86400秒。
定义一个长度为86400的整数数组int delta[86400],每个整数对应这一秒的人数变化值,可能为正也可能为负。开始时将数组元素都初始化为0。
然后依次读入每个用户的登录时间和退出时间,将与登录时间对应的整数值加1,将与退出时间对应的整数值减1。
这样处理一遍后数组中存储了每秒中的人数变化情况。
定义另外一个长度为86400的整数数组int online_num[86400],每个整数对应这一秒的论坛在线人数。
假设一天开始时论坛在线人数为0,则第1秒的人数online_num[0] = delta[0]。第n+1秒的`人数online_num[n] = online_num[n-1] + delta[n]。
这样我们就获得了一天中任意时间的在线人数。
腾讯笔试题:从10G个数中找到中数
在一个文件中有 10G 个整数,乱序排列,要求找出中位数,
内存限制为 2G。
不妨假设10G个整数是64bit的。
2G内存可以存放256M个64bit整数。
我们可以将64bit的整数空间平均分成256M个取值范围,用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一边10G整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。
如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。
腾讯笔试题:两个整数集合A和B,求其交集
两个整数集合A和B,求其交集。
1. 读取整数集合A中的整数,将读到的整数插入到map中,并将对应的值设为1。
2. 读取整数集合B中的整数,如果该整数在map中并且值为1,则将此数加入到交集当中,并将在map中的对应值改为2。
通过更改map中的值,避免了将同样的值输出两次。
腾讯笔试题:找出1到10w中没有出现的两个数字
有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数?
申请10w个bit的空间,每个bit代表一个数字是否出现过。
开始时将这10w个bit都初始化为0,表示所有数字都没有出现过。
然后依次读入已经打乱循序的数字,并将对应的bit设为1。
当处理完所有数字后,根据为0的bit得出没有出现的数字。
首先计算1到10w的和,平方和。
然后计算给定数字的和,平方和。
两次的到的数字相减,可以得到这两个数字的和,平方和。
所以我们有
x + y = n
x^2 + y^2 = m
解方程可以得到x和y的值。
腾讯笔试题:需要多少只小白鼠才能在24小时内找到毒药
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
最容易想到的就是用1000只小白鼠,每只喝一瓶。但显然这不是最好答案。
既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢?
首先让我们换种问法,如果有x只小白鼠,那么24小时内可以从多少瓶水中找出那瓶有毒的?
由于每只小白鼠都只有死或者活这两种结果,所以x只小白鼠最大可以表示2^x种结果。如果让每种结果都对应到某瓶水有毒,那么也就可以从2^x瓶水中找到有毒的那瓶水。那如何来实现这种对应关系呢?
第一只小白鼠喝第1到2^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)瓶....以此类推。
回到此题,总过1000瓶水,所以需要最少10只小白鼠。
腾讯笔试题:根据上排的数填写下排的数,并满足要求。
根据上排给出十个数,在其下排填出对应的十个数, 要求下排每个数都是上排对应位置的数在下排出现的次数。上排的数:0,1,2,3,4,5,6,7,8,9。
腾讯笔试题:判断数字是否出现在40亿个数中?
给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?
答案:unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即可。
篇5:腾讯笔试题参考
腾讯笔试题参考
腾讯笔试题(一)
腾讯的流程是一笔和四面,前三次面试都是技术面,hr面基本不刷人。笔试成绩决定面试顺序。技术面可能要写代码,做智力题目。
主要是c/c++、数据结构、操作系统等方面的基础知识。好像有sizeof、树等选择题。填空题是补充完整程序。附加题有写算法的'、编程的、数据库sql语句查询的。还有一张开放性问题。
1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。
int const shift = sizeof(int)*8-1;
unsigned mask = (0x1<
if ( (a-b)&mask )
max_num = b;
else
max_num = a;
#define Max(a,b) ( a/b)?a:b
2.如何输出源文件的标题和目前执行行的行数
int line= __LINE__;
char *file = __FILE__;
cout<<“file name is ”<<(file)<<“,line is ”<
3.两个数相乘,小数点后位数没有限制,请写一个高精度算法与大数相乘原理一样,只是调整小数点位置,即有效小数个数
算法提示:
输入 string a, string b;计算string c=a*b; 返回 c;
1, 纪录小数点在a,b中的位置l1,l2,则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;
2, 去掉a,b中的小数点,
(a,b小数点后移,使a,b变为整数)
3, 计算c=a*b;
(要么用java的BigInterger搞, 要么自己用C++写高精度数乘法,超过百万位,用FFT,我就不细说,这都预先写过就别做了
)
4, 输出c
(注意在输出倒数第l个数时,输出一个小数点,
若是输出的数少于l个,就补0)
4.写一个病毒
while (1)
{
int *p = new int[10000000];
}
上面这个不对,没有传染性,寄生性……
5.不使用额外空间,将 A,B两链表的元素交叉归并将树序列化转存在数组或 链表中
struct st{
int i;
short s;
char c;
};
sizeof(struct st);
8
char * p1;
void * p2;
int p3;
char p4[10];
sizeof(p1...p4) =?
4,4,4,10
5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。
最小堆
二分查找
快速排序
双向链表的删除结点
6、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
基础题有15道选择和2道读程序填空。选择题的确是很基础,主要考数据结构,还有一些体系结构、数据库的题目;读程序题跟我们平时考试的差不多,一道是两个升序链合并成一个升序链+递归,一道是四色着色方案附加题有几道没有看清楚。有一道是unix防僵死算法,最后一道是sql查询,还有几道忘了,其中一个是很长的程序题。
篇6:腾讯实习笔试题
腾讯实习笔试题
1)32位机上根据下面的代码,问哪些说法是正确的?(C)
signed char a = 0xe0;
unsigned int b = a;
unsigned char c = a;
A. a>0 && c>0 为真
B. a == c 为真
C. b 的十六进制表示是:0xffffffe0
D.上面都不对
解析:这个题目涉及到 有符号数和无符号数之间的转换0xe0的最高位是1,因此作为有符号数就是负数,作为无符号数就是正数
所以 A 肯定是错的, B也错,c = 0xe0是正数,原因是正数和负数怎么可能相等呢,C是对的 负数的高位用1补齐,这样分析的话 D 自然不会对
2)问下面的数据都存放在哪些存储区?
int main
{
char *p = “hello,world”;
return 0;
}
解析:根据C语言中的特性和定义p是一个局部变量,而C语言中局部变量存在于栈中,“hello wrold”是一个字符串字面常量,因此存储于程序的只读存储区中,p在这里其实只是指向了“hello wrold”在只读存储区中的地址而已,
3)关于 int a[10]; 问下面哪些不可以表示 a[1] 的地址?(A)
A. a+sizeof(int)
B. &a[0]+1
C. (int*)&a+1
D. (int*)((char*)&a+sizeof(int))A. a+sizeof(int)
解析:
A. a+sizeof(int)
// 不正确, 在32位机器上相当于指针运算 a + 4
B. &a[0]+1
// 正确,数组首元素地址加1,根据指针运算就是a[1]的地址
C. (int*)&a+1
// 正确,数组地址被强制类型转换为int*,然后加1,这样和B表示的一个意思
D. (int*)((char*)&a+sizeof(int))
// 正确,数据地址先被转换为char*,然后加4,根据指针运算公式,向前移动4 * sizeof(char),之后被转换为int*,显然是a[1]的地址
4)下面哪些说法正确?(B)
A. 数组和链表都可以随机访问
B. 数组的插入和删除可以 O(1)
C. 哈希表没有办法做范围检查
D. 以上说法都不正确
解析:数组可以直接通过下标得到存储的值 因此支持随机,访问链表是链式存储结构时无法支持随机访问,要访问一个指定位置的元素必须从头开始做指针移动。哈希表支持直接通过关键码得到值 其实数组就是一种哈希表 下标就是关键码 通过下标直接得到值 因此哈希表肯定需要做范围检查也有办法做范围检查的
5)基于比较的排序的时间复杂度下限是多少?(C)
A. O(n)
B. O(n^2)
C. O(nlogn)
D. O(1)
解析:大家记住这个结论就好 在当前计算机科学界对于基于比较的排序 最快只是O(n*logn)
6)有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?(BCD)
A. 1
B. 2
C. 3
D. 4
解析:大家要知道 C语言中的 ++ 和 += 并不是原子操作,而是通过多条微程序组成的,因此 ++ 和 += 在执行过程中可能被中断的
第一种可能情况:现在假设两个线程没有并行顺序执行的那么结果显然是 4,
第二种可能情况:再假设现在第一个n++ 已经执行完了 但是结果还没有写回内存 这个时候 n+=2 已经全部执行完 2 写进了内存 结束 然后回到n++的`写回操作 这个时候内存就从2被改回1了,后面再来一次n++ 结果就为2。
第三种可能情况: 第n+=2 先读取n的值到寄存器 即0入寄存器 这个时候被中断 第一个n++开始执行 并直到结束 内存被改成了1 ,然后 n+=2 继续执行 结束后内存变为2 第二个n++再执行 结果就是3了。
我个人认为 不可能得到1的执行结果
7)下面哪些函数调用必须进入内核才能完成?(AB)
A. fopen
B. exit
C. memcpy
D. strlen
解析:我觉得这题 肯定是 fopen 和 exit
fopen是打开文件的函数,文件也可以看成是一个设备,打开一个设备将导致给设备所属的驱动程序发送一个IRP,而与真实硬件相关的驱动程序都运行于内核.
exit函数是结束进程的函数,结束进程需要访问PCB(进程控制块)和TCB(线程控制块)等等一些数据结构,而这些数据都存在于内核中.原因很简单 memcpy 和 strlen 我们可以直接不调用任意函数写出来这种函数肯定不会实现在内核的
8)死锁发生的必要条件?(ABCD)
A. 互斥条件
B. 请求和保持
C. 不可剥夺
D. 循环等待
解析:互斥条件,请求和保持,不可剥夺 ,循环等待,这些都可能发生死锁 所以以后大家在做多线程程序时一定要注意了。
9)填空题
#include
#include
#define M 3
#define N 4
int get(int *a, int i, int j)
{
return *(a+i*N+j);
}
int main()
{
int a[M][N] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int v;
v = get(a, 2, 1);
printf(“a[2][1] == %d\n”, v );
return 0;
}
解析:大家注意原型中的指针是int* a,所以必须用二维数组在内存中是一维排布这个知识点来做,直接 return *(a+i*N+j);
而不是 return *(*(a+i)+j);
篇7:腾讯运营笔试题
腾讯运营笔试题
1.有3台复印机(copier),平均每台每周工作42小时,每台每周最少工作35小时,问一台复印机每周最多会工作多少小时?
答:42*3 - 35*2 =56
2.在一个长11 meters,宽6 meters的房间里,铺上10 centimeters厚的水泥,问需要多少水泥?
答:11*6*0.1=6.6 cubic meters
3.某公司有两座办公楼,一天,第一座楼20%的复印机和第二座楼40%的复印机需要进行维护,如果第一座楼拥有公司60%的复印机,问这天在维护的复印机是多少?
答:20% * 60% + 40% * (1 - 60%) = 28%
4.要在一个接待室(reception room)里铺瓷砖,接待室的长18 meters,宽12 meters,同时要修一条从大厅(hall)到楼梯(stair way)的通道(不铺瓷砖)占地50 squaremeters,允许铺设时有35%的浪费(wastage),1平方米瓷砖的价格是10美元,问大约(approximately)要花多少钱?
答:(18 * 12 - 50) * 135% * 10 = 2,200
5.某公司要做一个车辆更新,有2种车型,一种是X(忘了,用X代替),一种是van,新X每liter油走20公里,新van每liter油走15公里,旧X每liter油走15公里,旧van每liter油走12公里,现在要开15000公里,其中有60%由van来承担,问更新后将节省多少油?
答:(15000 * 60% / 12 + 15000 * 40% / 15) - (15000 * 60% / 15 + 15000 * 40%/ 20) = 250
6.有2个行政打字员(administrative typist),A的速度是B的1 1/4 times,现在要打72页文件,问快的那个人打了多少页?
答:72* 5/9 = 40
7.有一个呼叫中心,星期二的calls比星期一的1/2还多1/3,星期一和星期二的calls的`和是120,问星期二的calls是多少?
答:48
8.有一个软件公司,1/2的人是系统分析员,2/5的人是软件工程师,有1/4的人两者都是,问有多少人两者都不是?
答:1 - 1/2 - 2/5 + 1/4= 0.35
9.有一个crate要做等比例(proportionally)的缩放,为了能够便于运输(shipment),crate的尺度(dimension)是72,96,48,如果缩放到三个尺度的和是200,问最长的那个尺度要缩多少?
答:96 * (1 - 200 / 216) = 64 / 9 = 7.1
10. 有一个矩形,长是宽的1 1/3 times,如果把每边增加1,面积将增加85,问长是多少?
答:48
11.有一个printer,一小时能打12,000页,早上8:30开始打印,中途被打断2次,每次5分钟,13:15打完,问总共打了多少页?
答:55,000
12.一个粗细均匀的长直管子,两端开口,里面有4 个白球和4 个黑球,球的直径、两端开口的直径等于管子的内径,现在白球和黑球的排列是wwwwbbbb,要求不取出任何一个球,使得排列变为bbwwwwbb,
答:对接
13.一只蜗牛从井底爬到井口,每天白天蜗牛要睡觉,晚上才出来活动,一个晚上蜗牛可以向上爬3 尺,但是白天睡觉的时候会往下滑2 尺,井深10 尺,问蜗牛几天可以爬出来?
答:8天,第八天不等睡觉就上去了。
14.在一个平面上画条直线最多能将这一平面划分成多少个部分?
答:部分=n+1=1999+1=
15.在太平洋的一个小岛上生活着土人,他们不愿意被外人打扰,一天,一个探险家到了岛上,被土人抓住,土人的祭司告诉他,你临死前还可以有一个机会留下一句话,如果这句话是真的,你将被烧死,是假的,你将被五马分尸,可怜的探险家如何才能活下来?
答:“我要求被五马分尸”
16.怎样种四棵树使得任意两棵树的距离相等。
答:捆到一起。
17.27 个小运动员在参加完比赛后,口渴难耐,去小店买饮料,饮料店搞促销,凭三个空瓶可以再换一瓶,他们最少买多少瓶饮料才能保证一人一瓶?
答:18瓶。买18瓶后换6瓶,6瓶又换两瓶,共26瓶此时还有两个空瓶,可以向老板借一个瓶子,喝完后给他三个瓶子。
18.有一座山,山上有座庙,只有一条路可以从山上的庙到山脚,每周一早上8点,有一个聪明的小和尚去山下化缘,周二早上8点从山脚回山上的庙里,小和尚的上下山的速度是任意的,在每个往返中,他总是能在周一和周二的同一钟点到达山路上的同一点。例如,有一次他发现星期一的8点30和星期二的8点30他都到了山路靠山脚的3/4的地方,问这是为什么?
答:因为一个是上山,一个是下山。
19.有两根不均匀分布的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?
答:一个两头一起烧 一个烧一头。两头一起烧滴烧完滴时间应该是30MIN,这时一头烧滴应该还剩下可以烧30MIN的长度,再将它两头一起烧 就能计15MIN了。
篇8:腾讯实习生笔试题
腾讯实习生笔试题
一、单项选择题
1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项()
Int a1=x+y-z; int b1=x*y/z;
Int a2=x-z+y; int b2=x/z*y;
Int c1=xz; int d1=x&y|z;
Int c2=x>>z<
a1一定等于a2
b1一定定于b2
c1一定等于c2
d1一定等于d2
2) 程序的完整编译过程分为是:预处理,编译,汇编等,如下关于编译阶段的编译优化的说法中不正确的是()
A)死代码删除指的是编译过程直接抛弃掉被注释的代码;
B) 函数内联可以避免函数调用中压栈和退栈的开销
For循环的循环控制变量通常很适合调度到寄存器访问
D)强度削弱是指执行时间较短的指令等价的替代执行时间较长的指令
3) 如下关于进程的面熟不正确的是()
A)进程在退出时会自动关闭自己打开的'所有文件
B) 进程在退出时会自动关闭自己打开的网络链接
C) 进程在退出时会自动销毁自己创建的所有线程
D)进程在退出时会自动销毁自己打开的共享内存
4) 计算表达式x6+4×4+2×3+x+1最少需要做()次乘法
A)3
B)4
C)5
D)6
5) SQL语言中删除一个表的指令是()
DROP TABLE
DELETE TABLE
DESTROY TABLE
REMOVE TABLE
7)某产品团队由美术组、产品组、client程序组和server程序组4个小组构成,每次构建一套完整的版本时,需要各个组发布如下资源,美术组想客户端提供图像资源(需要10分钟)
,产品组向client组合server提供文字内容资源(同时进行,10分钟),server和client源代码放置在不同工作站上,其完整编译时间均为10分钟切编译过程不依赖于任何资源,client程序(不包含任何资源)在编译完毕后还需要完成对程序的统一加密过程(10分钟)。可以请问,从要完成一次版本构建(client与server的版本代码与资源齐备),至少需要多少时间()
A)60分钟
B)40分钟
C)30分钟
D)20分钟
8)如下关于编译链接的说法错误的是()
A)编译优化会使得编译速度变慢
B) 预编译头文件可以优化程序的性能
C) 静态链接会使得可执行文件偏大
D)动态链接库会使进程启动速度偏慢
9)如下关于链接的说法错误的是()
A)一个静态库中不能包含两个同名全局函数的定义
B)一个动态库中不能包含两个同名全局函数的定义
C)如果两个静态库都包含一个同名全局函数,他们不能同时被链接
D)如果两个动态库都包含一个同名全局函数,他们不能同时被链接
10)某火车站要通过一条栈道(先进后出)来调换进入车站的列车顺序,若进站的列车顺序为A、B、C,则下列哪个出站顺序不可能?()
A)ABC
B)ACB
C)CAB
D)CBA
11)栈是一种智能在某一端插入和删除的特殊线性表,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,若6元素为A、B、C、D、E、F出栈顺序为B、D、C、F、E、A,则S栈的最小容量为()
A)3
B)4
C)5
D)6
12)找工作的季节马上就到了,很多同学去图书馆借阅《面试宝典》这本书,现在图书馆外有6名同学排队,其中3名同学要将手中的《面试宝典》还至图书馆,有3名同学希望从图书馆中可以借到《面试宝典》,若当前图书馆内已无库存《面试宝典》,要保证借书的3名同学可以借到书,请问这6位同学有多少种排队方式()
A)60
B)120
C)180
D)360
13)若完全二叉树的节点个数为2N-1,则叶节点个数为()
A)N-1
B)2×N
C)2N-1
D)2N
14)排序算法的稳定是指,关键码相同的记录排序前后相对位置不发生改变,下面哪种排序算法是不稳定的()
A)插入排序
B)冒泡排序
C)快速排序
D)归并排序
15)下列说法中错误的是:()
A)插入排序某些情况下复杂度为O(n)
B)排序二叉树元素查找的复杂度可能为O(n)
C)对于有序列表的排序最快的是快速排序
D)在有序列表中通过二分查找的复杂度一定是O(n log2n)
16)在程序设计中,要对两个16K×16K的多精度浮点数二维数组进行矩阵求和时,行优先读取和列优先读取的区别是()
A)没区别
B)行优先快
C)列优先快
D)2种读取方式速度为随机值,无法判断
★ 腾讯校招笔试题

【腾讯笔试题(一、二)(精选8篇)】相关文章:
腾讯社招面试经历2023-12-05
北大清华保送生考试笔试题 你如何作答?2022-09-22
一道很多公司都会用的面试问答试题2022-09-16
腾讯的一道笔试算法题解答2022-10-06
百度暑期实习笔试面试应聘秘籍2023-01-19
关于阿里巴巴非技术类笔试经验2022-09-28
大唐移动笔试试题2022-12-09
阿里巴巴非技术类笔经2022-09-23
强生Johnson笔试题目2022-11-08
腾讯信息运营工作职责2022-05-04