網易遊戲2011招聘筆試題 答案解析

2022-03-01 15:22:24 字數 4604 閱讀 3325

網易遊戲 2011.10.15

1、對於乙個記憶體位址是32位、記憶體頁是8kb的系統。0x0005f123這個位址的頁號與頁內偏移分別是多少?

2、如果x大於0並小於65536,用移位法計算x乘以255的值為?

3、乙個包含n個節點的四叉樹,每個節點都有四個指向孩子節點的指標,這4n個指標中有個空指標

4、以下兩個語句的區別是:

int*p1 =newint[10]; 

int*p2 =newint[10](); 

5、計算機在記憶體中儲存資料時使用了大、小端模式,請分別寫出a=0x123456在不同情況下的首位元組是,大端模式:小端模式:x86結構的計算機使用模式

6、在遊戲設計中,經常會根據不同的遊戲狀態呼叫不同的函式,我們可以通過函式指標來實現這一功能,請宣告乙個引數為int *,返回值為int的函式指標:

7、下面程式執行後的結果為:

charstr = "glad to test something"; 

char*p = str; 

p++; 

int*p1 =static_cast<int*>(p); 

p1++; 

p =static_cast<char*>(p1); 

printf("result is %s\n",p); 

8、在一冒險遊戲裡,你見到乙個寶箱,身上有n把鑰匙,其中一把可以開啟寶箱,假如沒有任何提示,隨機嘗試,問:

(1)恰好第k次(1=

(2)平均需要嘗試多少次。

9、標頭檔案中ifndef / define / endif 是做什麼用的?

10、**裡有時可以看到extern 「c」,這語句是做什麼用的?

11、在下列乘法算式中,每個字母代表0~9的乙個數字,而且不同的字母代表不同的數字:

abcdefgh

*           aj

------------------

ejahfdgkc

bdfhajec

------------------

ccccccccc

請寫出推導的過程。

12、輸入格式:第一行輸入n(n<=100)表示流通的紙幣面額數量;第二行n個紙幣的具體表示的面額,從小到大排列,取值【1,10^6】。

輸出格式:輸出乙個整數,表示應該發行的紙幣面額,這個整數是已經發行的所有紙幣面額都無法表示的最小整數。(已經發行的每個紙幣面額最多只能使用一次)

輸入輸出 5

1 2 3 9 1007

51 2 4 9 1008

51 2 4 7 10015

每頁是8kb,所以只要將位址除以8kb就行了,這裡要用十六進製制除法,0x5f123/0x2000,保留位元組單位,將8k化成0x2000,除的結果是商2f,餘數為1123,所以頁號是0x2f(十進位制的47),偏移是0x1123。

x*255=x*(256-1)=(x<<8)-x 這裡的括號不能少,因為移位運算子的優先順序較低。

3n+1。具體舉幾個例子就可以推出通項了。

p1指向10個整型空間的首位址,每個整型空間裡的值未初始化(為垃圾值),p2指向10個整型空間的首位址,每個整型空間裡的值初始化為0。

int (*fun) (int*);

to test something 注意++是根據型別跳的,int一下子會跳4個位元組。

9. 預編譯時防止標頭檔案被重複包含。

10. 強調用c編譯器來編碼**。

11. 這題非常傷腦筋。第一步能推出來的是k=0。第二步看到a*a=b,沒有進製,因此a只能取0,1,2,3,0已經分給k了,而若a取1,則乘出來的結果應該很特殊,所以只能取2或3。假設a取3,則要求前一項ab的乘積不能有進製,但a*a=9,b=9,a*b=27,一定會出現進製,這樣就矛盾了,a只能取2。第三步看a*a的進製是e,a是2,2*2=4,進製是來自前一項的,前一項進製最多是7(最大數乘8*9=72),所以e只能取1。第四步把g推出來,乘法中有a*g=e的項,而a為2,e為1,e是奇數,說明有來自前一位的進製(這個進製最大只能是1,因為a只有2),g只有取5。第五步把b推出來,注意加法中有兩項e+b=c和g+e=c,都能得到c,而加法進製最多為1,所以推出g與b相差一位,k+c是不可能有進製的(因為k=0),這樣b就比g小1,所以b為4。第六步終於可以把c推出來了,g和e知道,而前一項加法不可能有進製,所以c一定是6。第七步可以推h了,2*h=6,h可以取3或8,假設h取3,則j*h=c項要求j只取2,與a=2矛盾,所以h只能取2。第八步順便把j推出來了,j不能取2了,只能取7。第九步把剩下的f解決了,已經推出很多項了,f硬算也能算出來為3。第十步不用說,d=9,再檢查一遍,都滿足條件。

12. 母函式問題,具體**如下。思想是將1的取與不取表示成(1+x),若取1則表示不用1塊錢紙幣,取x則表示用這個一塊錢;同樣,將3的取與不取表示成(1+x^3),若取1則表示不用這個三塊錢,取x^3則表示用這個三塊錢。(1+x)(1+x^2)(1+x^3)(1+x^9)(1+x^100),這樣乘開來,看看x的冪缺哪些,第乙個缺的就是題中要求的答案了。

1 #include 2

using

namespace

std;34

struct

element5;

910//二分查詢法,返回相應冪次,若沒有找到,則返回負數,這個負數+1取負,得到的正數表示的下標處前插

11int findpower(const element* result,const

int len, const

intpower)

1223

else

if(power >result[mid].power)

2427

else

2831}32

return -low - 1;33

}3435int generatefunction(int length, int*a)

3644 element *p1 = new element[2

];45 element *p2 = new element[2

];46 element *result = new element[sum +1

];47 p1[0].power = 0

;48 p1[1].power = a[0

];49 p1[0].coeff = 1

;50 p1[1].coeff = 1

;51 p2[0].power = 0

;52 p2[0].coeff = 1

;53 p2[1].coeff = 1;54

int index = 1;55

int resultlength = 0; //

result陣列的有效長度

56int p1length = 2; //

p1陣列的有效長度

57while(index

5877

//插入新冪元素

78element ins;

79 ins.coeff = 1

;80 ins.power =power;

81 result[findindex] =ins;

82 ++resultlength;83}

84else

8589}90

}91//一組迴圈結束

92delete p1;

93 p1 =result;

94 p1length =resultlength;

95 resultlength = 0

;96 result = new

element[sum];97}

98//

遍歷result,尋找到欠缺的冪次

99for(int i = 1; i < p1length; ++i)

100108

}109

return0;

110}

111112

113//

解決2011網易遊戲招聘的最後一題

114int

main()

115;

117int b[5] = ;

118int c[5] = ;

119 cout << generatefunction(5, a) <

120 cout << generatefunction(5, b) <

121 cout << generatefunction(5, c) <

122 }

網易遊戲2011招聘筆試題

1 對於乙個記憶體位址是32位 記憶體頁是8kb的系統。0x0005f123這個位址的頁號與頁內偏移分別是多少?2 如果x大於0並小於65536,用移位法計算x乘以255的值為?x 255 x 256 1 x 8 x 這裡的括號不能少,因為移位運算子的優先順序較低。3.extern c 在c 環境下...

百度2011招聘筆試題 答案解析

一 演算法設計 1 設rand s,t 返回 s,t 之間的隨機小數,利用該函式在乙個半徑為r的圓內找隨機n個點,並給出時間複雜度分析。2 為分析使用者行為,系統常需儲存使用者的一些query,但因query非常多,故系統不能全存,設系統每天只存m個query,現設計乙個演算法,對使用者請求的que...

盛大遊戲2011 10 22校招筆試題 答案解析

1 下列 的輸出為 include iostream include vector using namespace std int main void for itor array.begin itor array.end itor return 0 a 100 300 300 500 b 100 ...