2016-08-13
UVA - 375 Inscribed Circles and Isosceles Triangles
题目大意:等腰三角形给出底边和高,首先求内切圆 r1 ,再求切两腰和 r1 的圆 r2 ,同理求 r3 ……知道圆的半径小于0.000001。求这些圆的周长和。
解题思路:我们可以求出腰长 tmp = srqt( y * y + x * x / 4) , 内切圆半径 r = 2*s/ c(c是周长) = x * y / (2 * tmp + x)。后面的每一个圆要切前一个圆和两腰,过前一个圆作直线平行底边,上面的小三角行和整个三角形相似,而且每个小三角形和比它大的那个的比例都是想同的,所以两个r的比例也是相同的。这个比例k = (y - r * 2) / y;
注意:圆周率不要手打3.1415926……,用cmath里面的 acos(-1.0) 。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
int n;
scanf("%d", &n);
while ( n-- ) {
double x, y, PI = acos(-1.0);
scanf("%lf%lf", &x, &y);
double tmp, r, k, sum = 0;
tmp = sqrt(y * y + x * x / 4);
r = x * y / (2 * tmp + x);
k = (y - 2 * r) / y;
while ( r > 0.000001 ) {
sum += 2 * PI * r;
r *= k;
}
printf("%13.6lf\n", sum);
if ( n )
cout << endl;
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-1295360.html