d328 - S△=?
題目描述
題目給定三角形內部一點 Q,並從該點引出三條平行於三角形三邊的直線,將三角形分割成六個部分。已知三個平行四邊形部分的面積 S1, S2, S3,要求計算整個三角形 ABC 的面積。
解題思路
根據題目描述,可以推導出三角形面積的計算公式。設三角形三邊長度為 a, b, c,平行四邊形面積分別為 S1, S2, S3,則三角形面積 S 可以表示為:
S = S1 + S2 + S3 + sqrt(S1S2) + sqrt(S2S3) + sqrt(S3*S1)
但題目給定的公式是:S = s1 + s2 + s3 + (s2s3)/(2s1) + (s3s1)/(2s2) + (s1s2)/(2s3)
這個公式是基於平行四邊形面積與三角形面積的關係推導出來的。設平行於邊 a 的直線與三角形的交點為 D, E,平行於邊 b 的直線與三角形的交點為 F, G,平行於邊 c 的直線與三角形的交點為 H, I。則平行四邊形面積 S1 = a * h1, S2 = b * h2, S3 = c * h3,其中 h1, h2, h3 分別是平行四邊形的高。
根據相似三角形的性質,可以得到 h1, h2, h3 之間的關係,進而推導出三角形面積的計算公式。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <iostream>
using namespace std;
int main(){
double s1,s2,s3;
while(cin >> s1 >> s2 >> s3)
printf("%.2lf\n",s1+s2+s3+((s2*s3)/(2*s1))+((s3*s1)/(2*s2))+((s1*s2)/(2*s3)));
}