2208.txt

来自「北大ACM题目例程 详细的解答过程 程序实现 算法分析」· 文本 代码 · 共 45 行

TXT
45
字号

#include"stdio.h"
#include"math.h"


double area( double l1, double l2, double l3 )
{
	double p = ( l1 + l2 + l3 ) / 2;
	return sqrt( p * (p-l1) * (p-l2) * (p-l3) );
}

double sq( double a )
{
	return a * a;
}

int main()
{
	double ab,ad,ac,bc,bd,cd,ah,dh,af,sabc,sbcd, hi, v, bh1, bh2;
	scanf( "%lf %lf %lf %lf %lf %lf", &ab, &ac, &ad, &bc, &bd, &cd );
	
	sabc = area( ab, bc, ac );
	sbcd = area( bc, cd, bd );
	
	ah = sabc * 2 / bc;
	dh = sbcd * 2 / bc;


	bh1 = sqrt( bd*bd - dh*dh );
	if( cd*cd > bd*bd + bc*bc ) bh1 = -bh1;

	bh2 = sqrt( ab*ab - ah*ah );
	if( ac*ac > ab*ab + bc*bc ) bh2 = -bh2;
	
	af = sqrt( ad*ad - sq( bh1 - bh2 ) );
	hi = area( af, dh, ah ) * 2 / ah;
	v = sabc * hi / 3;

	printf( "%.4lf\n", v );

	return 0;
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?