1927.txt
来自「北大ACM题目例程 详细的解答过程 程序实现 算法分析」· 文本 代码 · 共 61 行
TXT
61 行
#include <stdio.h>
#include <math.h>
const double pi = 3.1415926535898;
const double eps = 1e-7;
int main()
{
int k = 1;
double l1, l2, l3, s, c, p, R, ctg1, ctg2, ctg3, len, r, ls, area;
while( 1 )
{
scanf( "%lf%lf%lf%lf", &l1, &l2, &l3, &len );
if( l1 == 0 && l2 == 0 && l3 == 0 && len == 0 )
break;
c = l1 + l2 + l3;
p = ( l1 + l2 + l3 ) / 2;
s = sqrt( p * (p-l1) * (p-l2) * (p-l3) );
if( len >= c )
{
printf( "Case %d: %.2lf\n", k++, s );
continue;
}
R = s * 2 / c ;
if( len <= R * 2 * pi )
{
printf( "Case %d: %.2lf\n", k++, len*len / (4*pi) );
continue;
}
ctg1 = ( p - l1 ) / R;
ctg2 = ( p - l2 ) / R;
ctg3 = ( p - l3 ) / R;
r = ( c - len ) / ( 2 * ( ctg1 + ctg2 + ctg3 ) - 2 * pi );
ls = c - 2 * ( ctg1 + ctg2 + ctg3 ) * r;
l1 -= ( ctg2 + ctg3 ) * r;
l2 -= ( ctg1 + ctg3 ) * r;
l3 -= ( ctg1 + ctg2 ) * r;
p = ( l1 + l2 + l3 ) / 2;
area = ls * r + sqrt( p * (p-l1) * (p-l2) * (p-l3) ) + r * r * pi;
printf( "Case %d: %.2lf\n", k++, area );
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?