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 如果可能,輸出盡量短...