UVA-375 Inscribed Circles and Isosceles Triangles

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章