题目大意:在等要三角形底边的高上堆圆,输出所有半径不小于 0.000001 的圆周长总和。
解题思路:三角形相似。
一般三角形内接圆半径 r=2S/(a+b+c),其中S是三角形面积,a、b、c 是三角形三边。
注意先判断半径再计算面积。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
int main() {
int T;
scanf("%d", &T);
while(T--) {
double B, H, PI = acos(-1.0);
scanf("%lf%lf", &B, &H);
double tmp, r, sum = 0;
tmp = sqrt(H * H + (B * B) / 4);
r = B * H / (2 * tmp + B);
double k = (H - 2 * r) / H;
while(r > 0.000001) {
sum += 2 * r * PI;
r = r * k;
}
printf("%13.6lf\n", sum);
if(T) printf("\n");
}
return 0;
}