tencent笔试题

腾讯的流程是一笔和四面。前三次面试都是技术面,hr面基本不刷人。笔试成绩决定面试顺序。技术面可能要写代码,做智力题目。

主要是c/c++、数据结构、操作系统等方面的基础知识。好像有sizeof、树等选择题。填空题是补充完整程序。附加题有写算法的、编程的、数据库sql语句查询的。还有一张开放性问题。

 

1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。

int const shift = sizeof(int)*8-1;
unsigned   mask = (0x1<<shift);
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 "<<line<<endl;

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.sizeof()

 

 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

 

6.有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?

 

第一趟过去:两人:花1分钟和2分钟的人  //总共耗时:2分钟
第一趟过来:一人:花1分钟的人         //总共耗时:3分钟
第二趟过去:两人:花5分钟和10分钟的人 //总共耗时:13分钟
第二趟过来:一人:花2分钟的人         //总共耗时:15分钟
第三趟过去:两人:花1分钟和2分钟的人 //总共耗时:17分钟

7.求四位数中因数最多的数。

 

首先分解因式: x = 2^p1 * 3^p2 * 5^p3 * ...*13^p6

为什么到13就可以了?2*3*5*7*11*13> 10000

如要四位数因数个数最多,因尽量包含前面的质因子。

因数个数 = (p1+1) * (p2+1) * ... * (p6+1),排列组合的问题。

 

8.找出三位数中满足x = abc + ab +c这种形式的所有数。


ab看成一个整体:x - c = 10 * ab + c + ab

                 x - 2 * c = 11 * ab

给定一个数只要能减掉0 2 4 6 8 10 12 14 16 18以后能被11整除两位,那么这个数满足上面的条件。

回来和实验室的师兄们讨论时,这个题可以转换成求11的倍数再加上0 2 4 6 8 10后,在100-999范围中的所有数。


9.16匹马,四个跑道,每赛一轮只能得到相对名词,问最好要多少行才能得到前三。

7次

 

转载于:https://www.cnblogs.com/alionxd/articles/3017090.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值