當前位置:學識都>好好學習>考研>

騰訊筆試題目

學識都 人氣:2.28W
騰訊筆試題目
選擇題(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! 寫起來代碼會長些!

#include <stdio.h>
#include <stdlib.h>
#define Max 100000000
int a[Max+10];

int cmp(const void *a, const void *b)
{
     int *x = (int *) a;
     int *y = (int *) b;
     return *x-*y;
}

int main()
{
     int n=0;
     while(scanf("%d",&a[n])==1)     n++;
     qsort(a,n,4,cmp);
     for(int i=0;i<3;i++)     printf("%d",a);
     return 1;
}

5、有A、B、C、D四個人,要在夜裏過一座橋。他們通過這座橋分別需要耗時1、2、5、10分鐘,只有一支手電,並且同時最多隻能兩個人一起過橋。請問,如何安排,能夠在17分鐘內這四個人都過橋?

Solution:

The First Time:      A(1)和B(2)過橋,A(1)返回 Cost:1+2
The Second Time:   C(5)和D(10)過橋,B(2)返回 Cost:10+2
The Third Time     A(1)和B(2)過橋 Cost:2

Total Time Cost:   (1+2)+(10+2)+2=17 minutes