前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FZU 2095 水面高度

FZU 2095 水面高度

作者头像
ShenduCC
发布2018-04-26 17:20:25
5260
发布2018-04-26 17:20:25
举报
文章被收录于专栏:算法修养算法修养

 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

几何题

代码语言:javascript
复制
#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;

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Accept: 40    Submit: 256 Time Limit: 1000 mSec    Memory Limit : 32768 KB
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档