創新工場筆試題

2021-06-18 13:48:33 字數 2955 閱讀 3538

1.輸入乙個整型無序陣列,用堆排序的方法是陣列有序

2.求乙個正整數的開方,要求不能使用庫函式sqrt,結果精度在0.01即可

3.給定乙個矩陣int matrixa[m][n],每行沒列都是增序的,實現乙個演算法尋找矩陣中的某個元素element

下面做出我的題解,能力有限,望見諒!

第一題:堆排序

考的排序演算法中的堆排序,這裡稍微講一下堆排序的演算法:

二叉樹:

基本概念:

大根堆:  就是說父節點要比左右孩子都要大。

小根堆:  就是說父節點要比左右孩子都要小。

演算法:1、從最後乙個父結點開始,從後往前遍歷樹的所有二叉樹的父節點,構造大頂堆;

2、整個數都是大頂堆,那麼樹的根節點肯定是陣列中的最大值,將其與最後乙個元素交換swap,這時可能會破壞大頂堆,需要重新構建大頂堆,

然後再取樹的根節點與最後乙個點交換,依次類推……

**如下:

[cpp]view plain

copy

#include 

#include 

void

heapadjust(

int*arr, 

intparent, 

intcnt)  

//若子節點大於根節點,則把子節點的值賦給根節點,否則跳出迴圈;跳出迴圈的原因是:

//既然是從最後乙個父節點開始往前構大根堆,如果父節點滿足大根堆,那其子節點也滿足大根堆

if(arr[child] > arr[parent])  

else

//沒有跳出迴圈說明,父節點與子節點值交換了,那有可能會導致大根堆被破壞,所以要檢查子節點

//是否還是大根堆

arr[child] = valparent;  

}  }  

void

swap(

int*a, 

int*b)  

void

heapsort(

int*arr, 

intcnt)  

//大根堆的第乙個數是最大的,將它與陣列最後乙個數作交換,每次交換都前移陣列的尾數索引

//交換過程中可能會導致大根堆遭破壞,所以要呼叫heapadjust(arr, 0 , iter)構建大根堆

//由於前面已經初始化大根堆,所以已經具備大根堆的特徵,不需要再乙個乙個父節點的慢慢構建

//只需要將heapadjust的第二個引數設定為0,即大根堆的第乙個父節點即可

for(iter = cnt - 1; iter >= 0; iter--)  

}  intmain(

void

)  ;  

intlen = 11;  

heapsort(arr, len);  

inti = 0;  

for( i = 0; i 

return

0;  

}  

第二題:二分法

直接使用二分法即可解答問題,但是題目中所說的是正整數的開方,我覺得完全可以擴充套件到浮點型的開方,浮點型開方需要注意一點問題,就是大於1和小於1的情況不一樣,比如0.9的平方是0.81,而我們是從0到0.81取二分的,顯然肯定找不到0.9這個數,所以要稍作處理。

[cpp]view plain

copy

/*分治法求平方根

*/#include 

#include 

#define epsion 0.000001

double

mysqrt(

double

des)  

else

}while

((sqr - des)  epsion);  

return

mid;  

}  int

main(

void

)    

}while

(num 

printf("its sqrt is %.4lf\n"

, mysqrt(num));  

return

0;  

}  

第三題:楊氏矩陣查詢

矩陣為matrixa[m][n],要找的數字為element,從第一行的最後一列的數matrixa[0][n - 1]開始查詢,element比matrixa[0][n - 1]小則向左查詢,否則向下查詢,直到找到該數時退出。圖示如下:(可能就會有多個element,只需找到其中乙個返回是否存在即可)

相應的**:

[cpp]view plain

copy

/*楊氏矩陣:查詢

*/#include 

#include 

#define m 4

#define n 4

intfindelement(

intmatrixa[m][n], 

intelement)  

while

(matrixa[i][j] <= element)  

}  }  int

main(

void

)  ,  

,  ,  

,  };  

inti = 0;  

for(i = 1; i <= 15; i++)  

}  return

0;  

}  

此題目摘取自july csdn**:

創新工場筆試小記(創新工廠演算法筆試題)

筆試題量很小,答題時間1個小時。1道填空題,9道左右選擇題,最後一道程式設計題。第一題 c intf intx return c int f int x return c 對於int a 65536 1024 8 1 int b f a 執行後b等於多少?第二題 5個骰子,六個面分別標有1 6,現在...

創新工場2023年校園招聘筆試題

1 include union a void main 執行結果 266 3 路由器與交換機的區別 4 程序與執行緒的差別 a 作業系統只排程程序,不排程執行緒 b 執行緒共享記憶體位址空間,程序不共享 c 執行緒間可以共享記憶體資料,但程序不可以 d 程序間可以通過ipc通訊,但執行緒不可以 5 ...

創新工場 2014創新工場校園招聘之回文串修復

題目 所謂回文,就是正序和倒序遍歷結果一樣的字串,比如 aba abcdedcba 實現乙個方法pal 輸入乙個字串,列印出以這個字串為字首的乙個回文。比如輸入 abc pal 方法列印出 abcdcba 或 abcba 輸入 abcb 可以輸出 abcbcba 或 abcba 如果可能,輸出盡量短...