就业数据资源平台
当前位置:首页 > 笔试题目
Tencent笔试题


选择题(60)

  c/c++   os   linux 方面的基础知识,c的Sizeof函数有好几个!

程序填空(40)

1.(20) 4空x5

  不使用额外空间,将 A,B两链表的元素交叉归并

2.(20) 4空x5

MFC  将树序列化 转存在数组或 链表中!


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


// 这样转向定义应该不算违规吧!^_^

#include "stdafx.h"

#include <string.h>

#include <iostream>

using namespace std;

#define Cmp(x,y) compare(x,y)

int compare(int a,int b)

{

     a^=(1<<31); b^=(1<<31);

     int i=31;

    while((i^-1) && !((a&(1<<i))^(b&(1<<i))))     i--;

     return (i^-1)?(((a>>i)&1)?1:-1):0;

}


int _tmain()

{

     int c;

     c = Cmp(5,4);

     cout<<c<<endl;

     return 0;

}


2.如何输出源文件的标题和目前执行行的行数(不晓得怎么搞,在等兄弟给我答案在!)

3.两个数相乘,小数点后位数没有限制,请写一个高精度算法

  算法提示:

     //想法来自北师大一个同学给我看的另一个题目以及他的java程序。

     输入 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.写一个病毒(没搞过,^_^)

5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。

//本算法使用快排,O(n*lg(n)) 

//最低可以找到线性算法,使用预先区域统计划分!类试于构造Quad Trees! 写起来代码会长些!

就业数据资源平台