三道baidu試題

2021-04-13 13:41:55 字數 1603 閱讀 5930

1、簡述:

n個空間,存放a到a+n-1的數,位置隨機且數字不重,a為正且未知,現在第乙個空間的數被誤設定為-1。 

說明:已經知道被修改的數不是最小的。

例子:n=6,a=2,原始的串為5,3,7,6,2,4。現在被別人修改為-1,3,7,6,2,4。現在希望找到5。

思路:充分利用等差數列性質。

法一:開一全0的新陣列,先找出被修改後的數中的最小值,然後讓陣列中的所有數依次減去這個最小值,所得的值作為另乙個新陣列的下標,將所有下標大於0的陣列值賦為1,此時新陣列中值為0的那個數就是被修改的數。

法二:找出被修改的數中的最小值和最大值,然後即可用等差數列求和公式求出所有數的和;再將空間中除-1外的所有數相加求和,將兩種方法求得的和相比較,若相等則說明被修改的是最大值,若不等則差值即為被修改的數

法三:將空間中所有數從小到大排序,然後從-1之後挨個後數減前數,若差值大於1說明相減的兩數間有被修改的數,若差值均等於1,說明被修改的是最大值。

程式:#include

#include

unsigned int find_lost1(const int * source, const int length)//方法1求解

for(i=0; i=0)

temp[index]=1;//將新陣列中下標大於0的元素賦值為1

}for(i=0; iunsigned int find_lost2(const int * source, const int length)//方法2求解}}

/*從非-1的數開始,後數減前數,因為是等差數列,差值必為1,若不為1則兩數之間是被替換的數*/

temp=0;

for (i=1,j=2;ivoid main()

;int loc;

loc=find_lost1(a, sizeof(a)/sizeof(a[0]));

cout<<"方法1,丟失的數是:"<2、簡述:給定乙個c++**檔案,輸出去掉注釋後的檔案內容。

說明:注釋可以使用「/*    */」和「//」,其語義為c++語義。注意處理兩種注釋混用的情況。

程式:#include

#include

#include

void foo(const char *src, char *buf, unsigned int buf_len)

;file *file;

if( (file=fopen(path, "r+")) != null)

;//平年前11個月的累加天數

int ltians = ;//閏年前11個月的累加天數

const int d = 24*3600;//一天時間的秒數

bool isleapyear(int yy)//判斷是否為閏年

void i2ymd(int absday)//將天數轉換為年月日

else

}int ymd2i(int yy,int mm,int dd)//將年月日轉換為天數

else

return absday;

}void adjusttime(int y,int m,int d,int h,int f,int s,unsigned int seconds)//返回n秒後的時間

int main()

兩道baidu試題

1 簡述 n個空間,存放a到a n 1的數,位置隨機且數字不重,a為正且未知,現在第乙個空間的數被誤設定為 1。說明 已經知道被修改的數不是最小的。例子 n 6,a 2,原始的串為5,3,7,6,2,4。現在被別人修改為 1,3,7,6,2,4。現在希望找到5。思路 充分利用等差數列性質。法一 開一...

三道面試題

一 給定乙個n個整數元素的陣列,元素分別為a1,a2,a3.an,每個元素分別對應乙個權重w1 小於1的float w2,w3.wn,其和為1,找出其中乙個元素ak,使所有小於ak的元素的權重之和小於1 2,所有大於ak的元素的權重之和 1 2。思路 首先將該陣列按元素值的大小進行公升序排列,同樣的...

baidu校招筆試題一二

functionfn args fn 21 輸出結果為 object。百思不得其解,因為確實不會。經過一番查詢才知道是es的新方法,這才算找到方向了。學習位址 物件中的擴充套件運算子 用於取出引數物件中的所有可遍歷屬性,拷貝到當前物件之中 functionfn args fn 21 將字串轉為陣列 ...