不再爱你……
描述
现在有一个圆柱形水杯,里面装满了水,在它的底部有一个小洞,通过一些简单的物理知识我们可以知道:
1、
由于重力的原因,水一定会从小洞流出来。
2、
小洞漏水的速度是和小洞那个位置的水所受到的压力大小成正比的。进而,我们可以知道,漏水的速度V和水面的的高度h成正比,简单起见,我们就直接让v=h吧(只是数值上的相等,v我们认为是单位时间漏出的水的体积,与小孔的大小无关,物理好的童鞋就不要深究了^_^)。
3、
如果你非常喜欢一个人,理论上在水漏完之前你一定不再喜欢TA了。
好吧,扯远了,我们现在的问题是,如果原来倒入了高度为h的水,从水开始流出时计为0时刻,如果在某个时间t,你不再只关心你喜欢的那个TA了,看了下水杯水面高度还有h1,那么你能计算出这个杯子的底面积s吗?
-
输入
-
第一行一个数n,表示测试数据组数。
接下来有n行数,每行数有三个数,分别表示最初倒入水面的高度h,时间t,t时刻的水面高度(所有物理量均按照国际单位制给出,且不含单位)。
输出
- 每组测试数据给出相应的水杯的底面积,四舍五入保留小数点后面一位数字即可,每组输出占一行。 样例输入
-
2 10 10 5 1 3 0.5
样例输出
-
14.4 4.3
来源
想法:
由题意得
用s表示底面积
用f(1)$(h1,h)表示(对1*dh在h1到h上进行积分)t*v==s*f(1)$(h1,h)
又v==h
所以t==s*f(1/h)$(h1,h)
s==t/(ln h1-ln h)
代码:
#include <stdio.h>
#include <math.h>
int main()
{
double h,h1,t;
int n;
scanf("%d",&n);
while (n--)
{
scanf("%lf%lf%lf",&h,&t,&h1);
printf("%.1lf\n",t/log(h/h1));
}
return 0;
}