看看大佬怎么刷題的:三點共線的判斷
時間:2021-08-19 16:29:22
手機看文章
掃描二維碼
隨時隨地手機看文章
[導讀]看膩了認知雞湯,你一無所獲,味同嚼蠟?看累了萬字長文,你收藏了事,心事重重?那么,歡迎來到濤哥公眾號,我們一起,上點算法小菜,斟點程序小酒,品味一下短小的趣味算法和程序,別有一番風味。面試題目在本文中,我們要討論的問題,小學生都可以看懂,卻出現在程序員的面試中,是我當時應聘一家游...
看膩了認知雞湯,你一無所獲,味同嚼蠟?看累了萬字長文,你收藏了事,心事重重?那么,歡迎來到濤哥公眾號,我們一起,上點算法小菜,斟點程序小酒,品味一下短小的趣味算法和程序,別有一番風味。
這么簡單的題目,我們該如何著手呢?本文不是為了把答案給大家,而是跟大家一起,來探討處理問題的自然思路。
S(ABC) = 0那么,已知三點坐標,如何計算三角形面試呢?顯然,海倫公式就可以搞定。只要高中不是特別貪玩,肯定用余弦定理證明過海倫公式,我來推導一下:
面試題目
在本文中,我們要討論的問題,小學生都可以看懂,卻出現在程序員的面試中,是我當時應聘一家游戲公司時遇到的問題,具體題目如下:如何判斷三點共線?多么簡單直白的題目,可要答好也并不容易。在面試時,我們要揚長避短,在自己熟悉的問題上,可以主動引導深入交流。遇到多種方法時,可采取循序漸進、逐步優(yōu)化的方式進行介紹,這樣也能給面試官留下很好的印象:條理清晰、思路開闊、輕重合理、善于優(yōu)化。這么簡單的題目,我們該如何著手呢?本文不是為了把答案給大家,而是跟大家一起,來探討處理問題的自然思路。
初中解法
最容易想到的,肯定是初中解法,即采用斜率的方式進行判斷,比如:K(AB) =?K(AC)即AB的斜率等于AC的斜率。知道了A、B、C的坐標,求斜率很簡單吧。然而,這個方法有個漏洞,因為當AB垂直于X軸時,斜率不存在(無窮大),所以,需要處理這種邊界情況。高中解法
如果你連斜率都忘記了,那我挺無語的。但是,也別著急,用面積法也可以,如果三角形ABC的面積為0,則三點共線,即S(ABC) = 0那么,已知三點坐標,如何計算三角形面試呢?顯然,海倫公式就可以搞定。只要高中不是特別貪玩,肯定用余弦定理證明過海倫公式,我來推導一下:
大學解法
如果你既忘記了斜率,又忘記了海倫公式,那我覺得是不太應該的。估計三角形面積的行列式公式,也應該也忘記了吧,如下:注意:內層黑色豎線是行列式,外層紅色豎線是絕對值。小學解法
如果你忘記了上面的所有方法,那怎么辦呢。別多說了,這是在面試,還是要解決問題,那就現場來解決吧。我們在小學就知道,兩點之間,直線段最短,所以,如果滿足如下條件之一,那也可以表明三點共線:AB ?BC = ACAB ?AC = BCAC BC =?AB這個是小學生就知道的方法,雖說是小學生解法,但求距離,還是要用初中知識的,說白了,就是勾股定理。具體編程
搞清了算法之后,具體編程就很簡單了,我們以最后的一種方法為例,來寫個簡單程序吧:#include
#include
using namespace std;
struct Point
{
float x;
float y;
};
float square(float x)
{
return x * x;
}
float getSide(const Point