⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1927.txt

📁 北大ACM题目例程 详细的解答过程 程序实现 算法分析
💻 TXT
字号:

#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -