題目
當一根長度為 L 的細棒被加熱 n 度時,它會膨脹到新的長度 L'=(1+nC)L,其中 C 是熱膨脹系數。
當一根細棒安裝在兩個實心壁上然后加熱時,它會膨脹并呈現出圓段的形狀,原來的棒是該段的弦。
您的任務是計算桿中心位移的距離。

輸入
輸入包含多行。每行輸入包含三個非負數:桿的初始長度(以毫米為單位)、溫度變化(以度為單位)和材料的熱膨脹系數。輸入數據保證桿的膨脹不會超過其原始長度的一半。輸入的最后一行包含三個負數,不應對其進行處理。
輸出
對于每行輸入,輸出一行,其中桿中心的位移以毫米為單位,精度為 3 位。
樣例輸入
1000 100 0.0001
15000 10 0.00006
10 0 0.001
-1 -1 -1
樣例輸出
61.329
225.020
0.000
分析
由題意我們能知道的量為弧長l1和弦長l,我們要求中心偏移的距離d,就要找到弧長l1和弦長l怎么與中心偏移的距離d產生聯系.

如圖,我們發現只要找出角度就能間接求出d


我們發現角度不能直接求出,但是有一條關于角度的關系式,于是我們可以想到二分的方法來近似出角度的大小
代碼
點擊查看代碼
#include<stdio.h>
#include<math.h>
#define pi 3.1415926535897932384626433832
int main()
{
double l,n,c,l1;
while(1)
{scanf("%lf %lf %lf",&l,&n,&c);
if(l<0&&n<0&&c<0){break;}
l1=(1+n*c)*l;
double left=0,right=pi,mid;
while(right-left>1e-12)
{
mid=(left+right)/2.0;
if(l<2*l1*sin(mid/2)/mid)
{
left=mid;
}else
{
right=mid;
}
}
printf("%.3lf\n",l1/mid*(1-cos(mid/2)));
}
return 0;
}
這個排版有點bug

浙公網安備 33010602011771號