兩道baidu試題

2021-04-13 22:53:30 字數 1226 閱讀 6985

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)

}

兩道筆試題

昨天一朋友找工作,碰到兩道演算法筆試題,都是當於鍊錶操作的.原題具體的還原不過來了,不過大致是 1.有一單鏈表,找出最後第m個節點.昨天看到問題時,想到了小學應用題 汽車過山洞,假如這個汽車開著開著,等到車頭剛要出山洞,車尾離山洞出口也有一段距離嘛.這樣,這個題方法出來了 cpp node find...

C 兩道筆試題

現給定乙個含有n個元素的陣列,請隨機獲取其中的m個元素 不能重複獲取 include include using namespace std void grial int a,int n,int x for i 0 i k i int main grial a,sizeof a sizeof int...

三道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。思路 充分利用等差數列性質。法一 開一...