百度歷年筆試面試題

摘自七月算法
http://ask.julyedu.com/question/456
1、用C語言實現一個revert函數,它的功能是將輸入的字符串在原串上倒序後返回。

2、用C語言實現函數void * memmove(void *dest, const void *src, size_t n)。memmove
函數的功能是拷貝src所指的內存內容前n個字節到dest所指的地址上。
分析:由於可以把任何類型的指針賦給void類型的指針,這個函數主要是實現各種數據類型的拷貝。

3、有一根27釐米的細木杆,在第3釐米、7釐米、11釐米、17釐米、23釐米這五個位置上各有一隻螞蟻。
木杆很細,不能同時通過一隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。
當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一釐米的距離。
編寫程序,求所有螞蟻都離開木杆的最小時間和最大時間。

4、給定一個存放整數的數組,重新排列數組使得數組左邊爲奇數,右邊爲偶數。
要求:空間複雜度O(1),時間複雜度爲O(n)。

5、在一維座標軸上有n個區間段,求重合區間最長的兩個區間段。

6、系統有很多任務,任務之間有依賴,比如B依賴於A,則A執行完後B才能執行
(1)不考慮系統並行性,設計一個函數(Task *Ptask,int Task_num)不考慮並行度,最快的方法完成所有任務。
(2)考慮並行度,怎麼設計
typedef struct{
int ID;
int * child;
int child_num;
}Task;

提供的函數:
bool doTask(int taskID);無阻塞的運行一個任務;
int waitTask(int timeout);返回運行完成的任務id,如果沒有則返回-1;
bool killTask(int taskID);殺死進程

7、解釋下面ptr含義和不同
double* ptr = &value;
//ptr是一個指向double類型的指針,ptr的值可以改變,ptr所指向的value的值也可以改變
const double* ptr = &value
//ptr是一個指向const double類型的指針,ptr的值可以改變,ptr所指向的value的值不可以改變
double* const ptr=&value
//ptr是一個指向double類型的指針,ptr的值不可以改變,ptr所指向的value的值可以改變
const double* const ptr=&value
//ptr是一個指向const double類型的指針,ptr的值不可以改變,ptr所指向的value的值也不可以改變

8、去掉const屬性,例: const double value = 0.0f; double* ptr = NULL;怎麼才能讓ptr指向value?
強制類型轉換,去掉const屬性,如ptr =

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章