這系列文章主要記錄遇到的一些比較經典的演算法題目,不斷更新。
1、二分演算法求多邊形外接圓的最大半徑。
題目要求:
給出n個線段長度,試將它們頭尾相接組合成乙個凸多邊形,使凸多邊形的外接圓(多邊形每個頂點都在圓上)的半徑最大,求該最大半徑。其中n<=10^5,線段長度均不超過100,要求演算法中不涉及座標的計算。
思路:二分演算法的的本質就是通過不斷迭代使left 和 right 在固定條件下逐漸靠近真實值,符合一定誤差,本題可以固定條件取為:凸多邊形的外接圓的弧度為2π
1 #include23/**4* 求弧度5*
*/67double gettotalradian(double edges,int n,doubler)8
1415
16/**17
* 二分查詢求最大半徑
18*/
19void
maxr()
2038
39//
若最長邊為直徑,則直接處理
40 radian = gettotalradian(edges,n,maxedge/2
);41
if(abs(radian-pi*2)4246
47//
左 中 右
48double left =0,right=10000000
,mid;
49//
在誤差範圍內迴圈求解
50while(right -left >error)
5159 printf("
外接圓的最大半徑是:%.2f
",mid);
6061 }
演算法經典題目
1.在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 因為這是乙個從左到右遞增和從上到下遞增的二維陣列,例如下 1,2,3,4 2,3,4,5 3,4,5...
js的一道經典題目
今天碰到一道題,裡面既包含了匿名函式的知識,也包含了預編譯,函式的傳參 形參 感覺迷迷糊糊的,所以想著做個總結。var foo function foo console.log foo.n foo console.log foo.n 上面的 可以寫成這樣,看解釋 1 var foo 2 functi...
js的一道經典題目
今天碰到一道題,裡面既包含了匿名函式的知識,也包含了預編譯,函式的傳參 形參 感覺迷迷糊糊的,所以想著做個總結。var foo function foo console.log foo.n foo console.log foo.n 上面的 可以寫成這樣,看解釋 1 var foo 2 functi...