UVA-375 Inscribed Circles and Isosceles Triangles

    xiaoxiao2025-01-11  7

    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
    最新回复(0)