[Swust OJ 771]--奶牛农场(几何题,画图就好)
题目链接:http://acm.swust.edu.cn/problem/771/
Description
将军有一个用栅栏围成的矩形农场和一只奶牛,在农场的一个角落放有一只矩形的箱子,有一天将军要出门,他就把奶牛用一根绳子套牢,然后将绳子的另一端绑到了那个箱子不靠栅栏的角上,现在给定箱子的长和宽,绳子的长度,你的问题是计算奶牛能够到达的面积。
Input
有多组测试数据。 每一组数据为一行,三个整数,L(0<=L<=500),M,N(1<=M,N<=500),分别表示绳子的长度,箱子的两边长度。假设农场无限大。
Output
对于每一组测试数据,输出奶牛能够到达的面积,保留两位小数。
Sample Input
1 1 1 |
2.36 |
解题思路:就一个几何题,画图就可以了,可以看看下面的图的分析
![](https://images0.cnblogs.com/blog2015/687925/201506/221526257051597.png)
代码如下:
1 //箱子在角落里---、-- 2 #include <stdio.h> 3 #include <math.h> 4 #define PI acos(-1.0) 5 #define minn(a,b) a<b?a:b 6 7 int main() { 8 double L, M, N, area; 9 while (scanf("%lf %lf %lf", &L, &M, &N) != EOF) { 10 if (L <= M&&L <= N) 11 area = 0.75 * PI * L * L; 12 //一个三角形,加一个扇形 13 else if (L <= M || L <= N){ 14 M = minn(M, N); 15 area = (sqrt((L * L) - (M * M)) * M) / 2.0; 16 N = (acos(M / L) * (180.0 / PI)); 17 area += (270.0 - N) / 360.0 * PI * L * L; 18 } 19 //两个三角形,加一个扇形 20 else { 21 area = sqrt(L * L - M * M) * M / 2.0; 22 area += sqrt(L * L - N * N) * N / 2.0; 23 area += (270.0 - ((acos(M / L) + acos(N / L)) * (180.0 / PI))) / 360.0 * PI * L * L; 24 } 25 printf("%.2lf\n", area); 26 } 27 return 0; 28 }
如果这是你所爱的,就不要让自己后悔~~~