1. 程式人生 > >BIT PP-2018 阿基米德定律

BIT PP-2018 阿基米德定律

2.阿基米德定律 BIT 的同學們非常喜歡大學物理。這一天,同學們正在做經典力學物理實驗。他們用某種材料製造了一個雙球形樣品塊。所謂雙球形,是指由兩個相交的球體形成的形狀。同學們首先測量並計算出了這個樣品塊的體積和表面積,然後將這個樣品塊放入某種液體中,並觀察其在這種液體中是上浮的狀態還是下沉的狀態。現在,同學們希望你能編寫一個程式,對實驗的預期結果做出預測。

為了避免精度誤差帶來的問題,請在程式中將圓周率設定為 2 * arccos(0)。

輸入格式 每個測試用例的第一行是一個整數 N,表示接下來有多少組資料需要你的程式進行處理。接下來的 N 行,每一行代表一組實驗資料,每組包含 5 個數:R1 (1 < R1 <= 500) 和 R2 (1 < R2 <= 500) ,分別表示組成雙球形的兩個球體的半徑,單位是 cm;d (max(R1, R2) < d < (R1+R2)) 表示組成雙球形的兩個球體的球心距,單位是 cm;w (0 < w < 10^10) 表示球的質量,單位是克;s (0 < s < 10) 表示液體的密度,單位是 克/立方厘米。

輸出格式 每一組實驗資料都應該對應兩行輸出。第一行是雙球形的體積和表面積(保留到小數點後4位);第二行指示雙球形樣品塊放入液體後的運動情況。若樣品塊下沉,輸出 “The Paired-Sphere Sinks.”(不輸出雙引號);否則輸出 “The Paired-Sphere Floats.”(不輸出雙引號)。

測試用例 in: 2 10 10 15 300 1.0 20 20 30 650000 1.0 out: 8017.6063 2199.1149↵ The Paired-Sphere Floats.↵ 64140.8500 8796.4594↵ The Paired-Sphere Sinks.↵

。。。。。完全不知道這題出的意義是什麼,主要就是考察球缺體積和麵積公式(推導過程請自行百度) 這是程式碼:

#include<stdio.h>
#include<math.h>
const double pi=2*acos(0);
int n;
double r1,r2,d,w,s;
int main()
{
	scanf("%d",&n);
	while(n--)
	{
		scanf("%lf%lf%lf%lf%lf",&r1,&r2,&d,&w,&s);
		double h1,h2,V1,V2,V,S1,S2,S;
		h1=r1-(r1*r1-r2*r2+d*d)/(2.0*d);
		h2=r2-(r2*r2-r1*r1+d*d)/(2.0*d);
		V1=(pi/3.0)*h1*h1*(3.0*r1-h1);
		V2=(pi/3.0)*h2*h2*(3.0*r2-h2);
		V=(4.0*pi*r1*r1*r1)/3.0+(4.0*pi*r2*r2*r2)/3.0-V1-V2;
		S1=2.0*pi*r1*h1;
		S2=2.0*pi*r2*h2;
		S=4.0*pi*r1*r1+4.0*pi*r2*r2-S1-S2;
		printf("%.4lf %.4lf\n",V,S);
		if(s*V<w)
			printf("The Paired-Sphere Sinks.\n");
		else
			printf("The Paired-Sphere Floats.\n");
	}   
	return 0;
}