網易遊戲 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 2using
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 ...