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 將字串轉為陣列 ...