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; }