此題只需求到內切圓半徑小於 0.000001 即可停止,但首先必須先將第一個半徑求出來,用B/2、H 求斜邊 SL,而內切圓半徑公式為 2 * S / (a+b+c)(S 為面積),則半徑求法寫成程式:
cycleLen = 1e-12;
scanf("%lf %lf", &B, &H);
B += 1e-15; H += 1e-15;
SL = (double)sqrt( (H*H) + (B*B/4) );
area = B * H / 2;
r = 2 * area / (SL+SL+B);
而下一個內切圓的半徑 r1,只需用比例法即可寫出,H : H-2r = r : r1,則 r1 = (H-2r)/H*r。用以上觀念寫成程式碼:
while (r >= 0.000001)
{
cycleLen += 2 * r * PI;
HSub2R = H - 2 * r;
r *= HSub2R / H;
H = HSub2R;
}
最後把 cycleLen 使用 %13.6lf 印出即可。
By David.K
p375題目連結
回ACM題庫目錄
回首頁
沒有留言:
張貼留言