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