網頁

2014年2月10日 星期一

UVa 375 Inscribed Circles and Isosceles Triangles

題意:
  求內切圓的圓周長總合,由於內切圓有無限多個,只要求到半徑0.000001為止。

                         

想法:
  先求斜邊T,在透過三角型面積 T*R*2 + B*R = B*H 算得內切圓半徑R。一開始我Pi値直接使用3.14159265359,想說已經夠了,沒想到還不夠精確@_@,因此pi要使用2*arcsin(1)。


#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
double B, H;
const double pi = 2 * asin(1);
int Case;
scanf("%d", &Case);
while (Case--){
scanf("%lf %lf", &B, &H);
double C = 0;
while (1){
double T = hypot(B/2, H);
double R = (B*H)/(2*T+B); // 2TR+BR = BH
if (R < 0.000001) break;
C += (2 * pi * R);
double H_tmp = H - 2*R;
B = B * (H_tmp / H);
H = H_tmp;
}
printf("%13.6f\n", C);
if (Case) printf("\n");
}
return 0;
}

沒有留言:

張貼留言