问题描述
在一部电影中,有一些来自太空的圆球,能使人的噩梦转化为现实。打个比方来说,如果你梦见你正被狮子袭击,那么在现实中你周围的人将会遭到狮子袭击。
现 在问题是送圆球来的外星人正在地球上,他们居住在自己建造的小岛上,小岛的四周被一种未知的有毒液体包围着。地球上的科学家目前还没有确定这种有毒液体的 化学成分,但却已准确地知道了它的一种物理属性——特有的重力G(S)。这种特有的重力会随着时间改变,因此我们的科学家每小时测一次。
外星人不袭击我们,他们所做的很简单,仅仅是在有毒液体上释放两个圆球组成的双球,双球飘向人类,然后使我们的噩梦成为现实。由于这些都是双球,其破坏力是一个圆球的两倍。外星人不擅长物理和数学,因此他们制造的双球有些也沉入到了毒液中。我们的科学家擅长物理,因此能确定这个球的质量,但不幸的是他们的数学也很差!因此他们向你求助来确定这个双球的体积和表面积,而且请你确定它是能飘在液体上还是下沉。你不必考虑漂浮和下沉的精度。设 pi=2*arccos(0)。
输入
输入数据的第一行是整数N,表示输入数据的组数。接下来的N行,每一行代表一组输 入,每组包含5个数:R1(0<=500)和R2(0<=500)分别表示双球的半径,单位是cm;d(表示双球的球心距,单位是cm,而 且d>max(R1,R2)且d<(R1+R2);球的质量w(w<10000000000,单位是克),有毒液体的密度s(0<s<10)。
输出
每组输入情况都有两行输出。第一行是圆球的体积和表面积(保留到小数点后4位),如果双球是下沉的,在第二行输出“The Paired-Sphere Sinks.”,否则输出“The Paired-Sphere Floats.”。
| 测试输入![]() | 期待的输出![]() | 时间限制![]() | 内存限制![]() | 额外进程![]() |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
一个比较简单的数学立体几何问题,求一个组合体的体积和表面积,组合体是由两个球体组合而成的。数学问题,想了解具体怎么计算的,可以搜索相关体积计算公式。
实现代码
<span style="font-family:Microsoft YaHei;font-size:14px;">#include<stdio.h>
#include<math.h>
#define pi 2*acos(0)
int main()
{
double r1,r2,d,density,h1,h2,den,f;
double m,v,v1,v2,s,s1,s2;
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%lf %lf %lf %lf %lf",&r1,&r2,&d,&m,&density);
h1=(r2*r2+d*d-r1*r1)/(2*d)-d+r1;
h2=(r1*r1+d*d-r2*r2)/(2*d)-d+r2;
v1=4*pi*r1*r1*r1/3-pi*h1*h1*(r1-h1/3.0);
v2=4*pi*r2*r2*r2/3-pi*h2*h2*(r2-h2/3.0);
v=v1+v2;
s1=4*pi*r1*r1-2*pi*r1*h1;
s2=4*pi*r2*r2-2*pi*r2*h2;
s=s1+s2;
den=m/v;
f=den-density;
printf("%.4lf %.4lf\n",v,s);
if(f>0.0)
printf("The Paired-Sphere Sinks.\n");
else
printf("The Paired-Sphere Floats.\n");
}
return 0;
}</span>