筆試面試題二

2021-06-08 10:50:25 字數 1679 閱讀 3816

1、c字串是以『\0』字元作為結束標誌的

char *p="abcde\0fghjik\0";

printf("%d\n" , strlen(p)); //5 (a、b、c、d、e)

char acnew[20]= "\\0\0";

printf("%d\n",strlen(acnew)); //2 (\和0)

2、建構函式和虛析構函式

#include "stdafx.h"

#include #include class a

;   //字元指標陣列

char **b=a;     //ok

int a[3][4];

int (*p)[4]=a;   //ok,指向含有4個整型元素的一維陣列的指標

int  **p = a;     //error

4、不要返回臨時變數的引用

float &test(float a,float b)

float c=a*b;

returnc;           //返回臨時變數的引用,當函式結束後,該臨時物件記憶體被釋放掉,返回的引用變成空引用

5、const引用的特殊用處(const變數在編譯期間就已經確定初始值了)

int a = 10;

double &test = a + 0.2;              //error,不同型別的引用

const double &test = a + 2.0;     //ok,const引用可用於不同型別之間

const int &ra=a;

ra=1;  //error

a=1;   //ok

void bar(string &s);

bar(「hello」);      //error,試圖將乙個const 物件轉換為非const

6、桶排序介紹

輸入是由乙個隨機過程產生的[0, 1)區間上均勻分布的實數。

將區間[0, 1)劃分為n個大小相等的子區間(桶),每個桶大小1/n:[0, 1/n), [1/n, 2/n), [2/n, 3/n),…,[k/n, (k+1)/n ),…,

將n個輸入元素分配到這些桶中,對桶中元素進行排序,

按照順序將各個桶中的元素列出來。

7、在乙個檔案中有 10g 個整數,亂序排列,要求找出中位數。記憶體限制為 2g。只寫出思路

解法:首先假設是32位無符號整數。

1. 讀一遍10g個整數,把整數對映到256m個區段中,用乙個64位無符號整數給每個相應區段記數。說明:整數範圍是0 - 2^32- 1,一共有4g種取值,對映到256m個區段(256m個桶),則每個區段有16(4g/256m = 16)種值,每16個值算一段, 0~15是第1段,16~31是第2段,……2^32-16 ~2^32-1是第256m段。乙個64位無符號整數(計數)最大值是0~8g-1,這裡先不考慮溢位的情況。總共占用記憶體256m×8b=2gb。

2. 從前到後對每一段的計數累加,當累加的和超過5g時停止,找出這個區段(即累加停止時達到的區段,也是中位數所在的區段)的數值範圍,設為[a,a+15],同時記錄累加到前乙個區段的總數,設為m。然後,釋放除這個區段占用的記憶體。

3. 再讀一遍10g個整數,把在[a,a+15]內的每個值計數,即有16個計數。

4. 對新的計數依次累加,每次的和設為n,當m+n的值超過5g時停止,此時的這個計數所對應的數就是中位數。

筆試面試題

1 昨天參加一公司筆試,給幾道演算法題整懵了,其實也不難,但好久沒有碰演算法,只是有思路,要讓我在這麼短的時間內寫出程式來還是不行。2 這裡將其中一道稍微複雜一點的演算法題寫下來,以此小結。3 4 題目描述 5 將n個雞蛋放入到m個籃子中去 n m 保證每個籃子中至少乙個雞蛋,然後指定乙個數x,要求...

面試題 筆試

題1 有如下資料庫表tab 請用乙個 delete 語句,刪除 value 重複的行,每個 value 只保留 id 最小的一行。delete from tab where id notin select from select min id from tab groupby value a 好像有...

筆試面試題

1.書架上有編號為1 19的19本書,從中拿5本,問5本編號都不相鄰的拿法有多少種?使用隔板法,拿掉5本後剩下14塊板,即有15個空,使用組合15份插5份 c15 5 3003 2.1億個資料取前1萬大的整數 演算法思路 a.把1億個資料分成10000個陣列,b.求出10000個陣列的最大值,儲存到...