騰訊2015研發筆試大題

2021-07-05 03:49:04 字數 2673 閱讀 6587

1.遞迴實現格雷碼

感覺這道題完全是考察對格雷碼規律熟悉程度。如果能夠能夠比較清楚的知道這點,**實現比較簡單。具體格雷碼如下:

1位格雷碼 0 1

2位格雷碼 00 01 11 10

3位格雷碼 000 001 011 010 110 111 101 100

4位格雷碼 0000 0001 0011 0010 0110 0111 0101 0100

1100 1101 1111 1110 1010 1011 1001 1000

… 從上面的書寫過程中可以看出如下規律:

1)n位格雷碼有2^n個;

2)1位格雷碼只有 0 和 1;

3)n位格雷碼前2^(n-1)個是把n-1位格雷碼順序抄寫下來,並在高位加0;(如果用整形表示格雷碼,高位加0數值不變,只需要順序抄寫下來就可以了)

4)n位格雷碼後2^(n-1)個是把n-1位格雷碼逆序抄寫下來,並在高位加1;(如果用整形表示格雷碼,高位加1,可以直接用數值加上2^(n-1))

有了上述規律寫起遞迴來就很簡單了:

vector

getgraycode(int n)

int graycodecount = pow(2.0,n);

getgraycode(n-1);//處理n-1位格雷碼的生成

for(int i=garycodecount>>1;i1] + (graycodecount>>1));//處理格雷碼的後2^(n-1)位

}return vc;

}

2.九宮格

題目大概是這樣的:

a + b - 9 = 4

+ - -

c - d * e = 4

/ * -

f + g - h = 4

= = =

4 4 4

問每個變數的取值都在0~100之間,程式設計實現找所有變數的取值。

這題感覺就是考數學,可惜做的時候沒有認真的想。下面是我的分析思路:

a<=4 b=15-a <– a+b-9=4

h<=5 e=5-h <– 9-e-h=4

f>=1&&f<=25 <– a+c/f=4 c<=100

e d g != 0 <– 等於0時不滿足條件

有了上面的分析就可以很容易的寫出**了:

int main()

3.程序的同步互斥問題

題目大概是這樣描述的:有三個程序producer,transmitter,consumer。其中producer負責將資訊不斷地輸入producebuf,transmitter負責從producebuf取資訊進行處理,並將處理結果送至consumbuf,consumer負責從consumbuf中讀取結果。(好像沒有提每個buf同一時刻只能有乙個程序訪問,反正我是預設了)。假設producebuf可以放12個資訊,現在已經放了3個,consumbuf最多可放6個資訊,要求寫出正確的同步互斥演算法。

這個過程我認為關鍵在transmiter這個程序,如果consumbuf已經滿了,不應從producebuf裡取資訊,保證一旦從producebuf裡取出資訊那麼就一定能放入consumbuf。

pbufempty = 9; //producebuf 可用數目

pbuffull = 3; //producebuf 已用數目

cbufempty = 6; //consumbuf 可用數目

cbuffull = 0; //consumbuf 已用數目

pmutex = 1,cmutex = 1;//控制資源互斥訪問

void produce() //producer 程序

}void consumer() //consumer 程序

}void transmitter() //transmitter 程序

}

參考:

4、找出在序列中出現超過一半以上的數字

這題是《劍指office》上的原題,可惜當時只想記得用快排的方法來做。書上記錄了一種更好的方法,根據數字出現次數與序列個數的關係:超過一半表示相同元素的個數,比其他元素個數至少多1。可以寫出如下演算法思路:

1)定義乙個計數器count = 1,並記錄當前的元素為key;

2)遍歷序列,如果下乙個元素與key不相同則count–;相同則count++;

3)當count==0時,將當前元素重新賦值為key,並令count=1。

這樣最後的key就是我們要求得元素。

**實現:

int findnum(int* arr,int len)

else

if(key == arr[i]) count++;

else

count--;

}//當然最後要驗證一下key是不是真的出現了一半以上

count = 0;

for(int i=0;iif(key == arr[i]) count++;

}if(count

< len/2) return -1;

return key;

}

騰訊2013研發筆試題目

1.資料庫 資料庫中有可能會存在不一致的資料。造成資料不一致的原因主要有 如果資料庫中存在冗餘資料,比如兩張表中都儲存了使用者的位址,在使用者的位址發生改變時,如果只更新了一張表中的資料,那麼這兩張表中就有了不一致的資料。比如某個訂票系統中,兩個使用者在同一時間訂同一張票,如果併發控制不當,可能會導...

人人網2015研發筆試卷

1.計算機中處理乘法的指令要比加法複雜的多,因為在一些關鍵系統中我們常常會考慮如何盡可能減少乘法的運算。現在有如下的表示式y anxn an 1xn 1 a1x a0,其中an,an 1,a1,a0是常數,給乙個x,要求盡快算出y的值。請嘗試寫出這樣的乙個函式。2.給出二叉樹介面為 class no...

2015有道實習生研發筆試

回憶版 有些題記不清了 基礎題 1 下一段 輸出什麼 int a 5 int b int a 1 cout a 1 b 1 return 0 2 巨集 define fuc a a a int x 5 x func x cout 求輸出的值是多少 3 中序遍歷為abcde,前序遍歷不可能為什麼 4 ...