FZU 2095 水面高度

 Problem 2095 水面高度

Accept: 40    Submit: 256
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

kk手上有个长方体,三边长AC,AB,AD分别为a,b,c,现在里面的水高度为d(0<=d<=c)。现在kk将长方体沿AB边翻转,当C点的高度为x(0<=x<a)时,求水面高度。

 Input

第一行一个整数T,表示有T(1<=T<=1000)组数据。

每组数据输入五个整数:a b c d x (10<=a,b,c<=100)。

 Output

每组数据输出一行,表示水面高度,结果保留两位小数。

 Sample Input

215 10 20 10 1283 33 26 18 7

 Sample Output


几何题
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>

double a,b,c,d,x;
double ans;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
	scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&x);
    if(x==0)
	{
		printf("%.2f\n",d);
	    continue;
	}
	double s=a*d;
	double angle=asin(x/a);
  double sinx=sin(angle);
  double cosx=cos(angle);
	//double cosx=sqrt(1-sinx*sinx);

	double x2=c*cosx;
    double h2=x+x2;
	double l;
	double s1;
	
	if(x<x2)
	{
      l=a/cosx;
	  s1=l*x*0.5;
	  //h2=cosx*c+x;
	}
	else if(x>=x2)
	{
		l=c/sinx;
		s1=l*x2*0.5;
		x=x2;
		//h2=sinx*a+x;
	}
    if(s<=s1)
	{
        double num=s/s1;
		double k=sqrt(num);
		ans=k*x;
	}
	else if(s>s1&&s<=(a*c-s1))
	{
		double s2=s-s1;
		double h=s2/l;
		ans=h+x;
	}
	else
	{
       //double s2=a*c-s1;
	   //double s3=s-s2;
	   double s4=a*c-s;
	   double num=s4/s1;
	   double k=sqrt(num);
	   double h=k*x;
	   ans=h2-h;

	}
	
	printf("%.2f\n",ans);
	}
	return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值