1、對于一個內存地址是32位、內存頁是8KB的系統。0X0005F123這個地址的頁號與頁內偏移分別是多少。
頁面大小是8KB,那么頁內偏移量是從0x0000(0)~ 0x1FFF(2的13次方 - 1)。0x5F123/8K=2E,余數是1123;則頁號是47頁,頁內偏移量應該是0X00001123。
2、如果X大于0并小于65536,用移位法計算X乘以255的值為:???**(X<<8)-X**
**X<<8-X是不對的,因為移位運算符的優先級沒有減號的優先級高,首先計算8-X為0,X左移0位還是8。**
3、一個包含n個節點的四叉樹,每個節點都有四個指向孩子節點的指針,這4n個指針中有?? **3n+1**? 個空指針。
4、以下兩個語句的區別是:第一個動態申請的空間里面的值是隨機值,第二個進行了初始化,里面的值為0
~~~
int *p1 = new int[10];
int *p2 = new int[10]();
~~~
5、計算機在內存中存儲數據時使用了大、小端模式,請分別寫出A=0X123456在不同情況下的首字節是,大端模式:0X12????????? ?小端模式:0X56?????????? X86結構的計算機使用??**小端**?? 模式。
一般來說,大部分用戶的操作系統(如windows, FreeBsd,Linux)是小端模式的。少部分,如MAC OS,是大端模式 的。
6、在游戲設計中,經常會根據不同的游戲狀態調用不同的函數,我們可以通過函數指針來實現這一功能,請聲明一個參數為int *,返回值為int的函數指針:
int (*fun)(int *)
7、下面程序運行后的結果為:to test something
~~~
char str[] = "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=<K<=N)打開寶箱的概率是多少。? (1-1/n)*(1-1/(n-1))*(1-1/(n-2))***(1/(n-k+1)) = 1/n
(2)平均需要嘗試多少次。
這個就是求期望值?? 由于每次打開寶箱的概率都是1/n,則期望值為:?? 1*(1/n)+2*(1/n)+3*(1/n)+......+n*(1/n) = (n+1)/2
9、頭文件中ifndef / define / endif 是做什么用的?
10、代碼里有時可以看到extern “C”,這語句是做什么用的?
11、平均要取多少個(0,1)中的隨機數才能讓和超過1。

12、在下列乘法算式中,每個字母代表0~9的一個數字,而且不同的字母代表不同的數字:
ABCDEFGH
*?????????????? ??AJ
------------------
EJAHFDGKC
BDFHAJEC
------------------
CCCCCCCCC
請寫出推導的過程。
本題唯一解為:A=2、B=4、C=6、D=9、E=1、F=3、G=5、H=8、J=7、K=0
13、輸入格式:第一行輸入N(N<=100)表示流通的紙幣面額數量;第二行N個紙幣的具體表示的面額,從小到大排列,取值【1,10^6】。
輸出格式:輸出一個整數,表示應該發行的紙幣面額,這個整數是已經發行的所有紙幣面額都無法表示的最小整數。(已經發行的每個紙幣面額最多只能使用一次)
<table border="1" cellpadding="0" cellspacing="0" width="580"><tbody><tr><td><p align="center">輸入</p></td><td><p align="center">輸出</p></td></tr><tr><td><p align="center">5</p><p align="center">1 2 3 9 100</p></td><td><p align="center">7</p></td></tr><tr><td><p align="center">5</p><p align="center">1 2 4 9 100</p></td><td><p align="center">8</p></td></tr><tr><td><p align="center">5</p><p align="center">1 2 4 7 100</p></td><td><p align="center">15</p></td></tr></tbody></table>
思路:這是一個典型的母函數問題,一般的典型母函數如 G(x)= ?(1+x+x^2+x^3+x^4+x^5+....)*(1+x^2+x^4+x^6+x^8+x^10+....)*(1+x^3+x^6+x^9+x^12....).....
這個題目中的每個紙幣只能夠使用0次或1次,在上面的那個一般的母函數的基礎上修改一下就行了,就很簡單了。。
具體代碼如下:
~~~
#include <iostream>
using namespace std;
const int lmax=10000;
int c1[lmax+1],c2[lmax+1];
int main(void)
{
int m,n,i,j,k,a[110];
//計算的方法還是模擬手動運算,一個括號一個括號的計算,從前往后
while (cin>>m && m)
{
n=0;
for(i = 0; i < m; i++)
{
scanf("%d",&a[i]);
n += a[i];
}
n += 5; //有可能無法表示的那個數比所有紙幣面額的總和還要大
for(i = 0; i <= n; i++)
{
c1[i] = 0;
c2[i] = 0;
}
for(i = 0; i < 2*a[0]; i += a[0]) //母函數的表達式中第一個括號內的各項系數
c1[i] = 1;
//第一層循環是一共有 n 個小括號,而剛才已經算過一個了,所以是從2 到 n
// i 就是代表的母函數中第幾個大括號中的表達式
for(i = 2; i <= m; i++)
{
for(j = 0; j <= n; j++) //j 就是指的已經計算出的各項的系數
{
for (k = 0; k < 2*a[i-1]; k += a[i-1]) //k 就是指將要計算的那個括號中的項
{
c2[j+k] += c1[j]; //合并同類項,他們的系數要加在一起,所以是加法
}
}
for(j = 0; j <= n; j++) // 刷新一下數據,繼續下一次計算,就是下一個括號里面的每一項
{
c1[j] = c2[j];
c2[j] = 0;
}
}
for(i = 1; i <= n; i++)
{
if(c1[i] == 0)
{
cout<<i<<endl; //找出第一個無法表示的紙幣面額
break;
}
}
}
return 0;
}
~~~
- 前言
- 程序員有趣的面試智力題
- 淘寶網 校園招聘 技術人員筆試題
- 網新恒天2011.9.21招聘會筆試題
- 淘寶2011.9.21校園招聘會筆試題
- 騰訊2011.10.15校園招聘會筆試題
- 網易游戲2011.10.15校園招聘會筆試題
- 百度2011.10.16校園招聘會筆試題
- 微策略2011校園招聘筆試題(找出數組中兩個只出現一次的數字)
- 百度最新面試題集錦
- C/C++筆試題目大全
- 各大IT公司校園招聘程序猿筆試、面試題集錦
- Trie樹詳解及其應用
- 后綴數組求最長重復子串
- 海量數據隨機抽樣問題(蓄水池問題)
- 搜狐2012.9.15校園招聘會筆試題
- 搜狗2012.9.23校園招聘會筆試題
- Google2012.9.24校園招聘會筆試題
- 優酷土豆2012.9.12校園招聘會筆試題