openjudge 膨脹的木棍

2021-09-21 17:06:59 字數 2932 閱讀 6767

總時間限制: 1000ms  記憶體限制: 65536kb

描述

當長度為l的一根細木棍的溫度公升高n度,它會膨脹到新的長度l'=(1+n*c)*l,其中c是熱膨脹係數。

當一根細木棍被嵌在兩堵牆之間被加熱,它將膨脹形成弓形的弧,而這個弓形的弦恰好是未加熱前木棍的原始位置。

你的任務是計算木棍中心的偏移距離。

輸入三個非負實數:木棍初始長度(單位:公釐),溫度變化(單位:度),以及材料的熱膨脹係數。

保證木棍不會膨脹到超過原始長度的1.5倍。

輸出木棍中心的偏移距離(單位:公釐),保留到小數點後第三位。

樣例輸入

1000 100 0.0001
樣例輸出

61.329
參考:

1 #include2 #include3

#define pi (acos(-1))

4#define eps (1e-14)

5int main(int argc, char *ar**)620

21 l1=(1+n*c)*l;

2223

//下面對圓心角進行二分列舉

24//

(膨脹量不超過原來的1.5倍,

25//

分析圓的半周長pi*r與直徑2*r的關係可知圓心角範圍0~2*pi而且不可能取2*pi)

26 mincentralangle=0;//

圓心角的極小值

27 maxcentralangle=pi;//

圓心角的極大值

28while(mincentralangleeps)

2938 radius=l/2/sin(mincentralangle/2

);39 ans=radius-l/2/tan(mincentralangle/2

);40 printf("

%.3lf\n

",ans);

41return0;

42 }

一定要注意:我們需要二分的內容是當前角度,那麼角度的範圍可以很容易發現,因為木棍長度不超過1.5倍那麼就定角度為0-

π因為如果圓心角過小會發現半徑十分的大根本存不下,其實這種情況的時候木棍長度的變化也是十分的小的那麼 

if(n * c * l <= eps)

判斷一下如果滿足那麼直接就輸出0.000, 

另外要注意:當弦長固定時,圓心角越大 ,弧長就越大 。

網友jeremygjy的**和分析很好,摘抄一下:

csdn網友tank_long的分析更精彩,只不過下面這個圖的公式似乎有點亂。

公式大概如下:

首先要注意θ角是圓心角的一半。然後根據數學公式有:

sinθ=2sin(θ/2)cos(θ/2)

1-cosθ=2sin(θ/2)2

然後還要注意根據直角三角形正弦的定義有:l=2*r*sinθ

根據弧長公式有ll=2*r*θ

所以h=r-r*cosθ=r*(1-cosθ)=l/(2*sinθ)*(1-cosθ)=l/(2*sinθ)*(2sin(θ/2)2)=l/( 2*  ( 2*sin(θ/2)*cos(θ/2)  )    )*(2sin(θ/2)2 )

最後h=l/2*tan(θ/2)

注意到θ是圓心角的一半,所以θ得區間是0~pi,根據正切函式圖形性質可以知道當l固定時,h跟θ是成正比關係的。

tank_long的**:(不得不佩服起數學功底啊……)

1 #include2 #include3 #include4

intmain() 5

14 ll=l*(1+n*c);

15 lef=0.0; //

角的極小值

16 rig=asin(1.0); //

角的極大值

17//

由於三角函式轉換,得到 h= (l/2)*tan(@/2) , 所以h只與角@有關,使用二分逼近法去求解最接近的@即可

18//

注意,二分驗證是讓 ll與角@ 計算得到的 木棍原始長度l`=ll*sin@/@ 與 l 進行比較,且l`與@成反比例關係

19while(rig-lef>1e-14) //

在極大值與極小值之間進行二分,這個地方精度控制太低就過不了了。精度要求很高。

20

27 printf("

%.3lf\n

", l/2*tan(lef/2

));

28return

0;

29 }

view code

openjudge7939 膨脹的木棍

時空限制 1000ms 64mb 當長度為l的一根細木棍的溫度公升高n度,它會膨脹到新的長度l 1 n c l,其中c是熱膨脹係數。當一根細木棍被嵌在兩堵牆之間被加熱,它將膨脹形成弓形的弧,而這個弓形的弦恰好是未加熱前木棍的原始位置。你的任務是計算木棍中心的偏移距離。三個非負實數 木棍初始長度 單位...

1 11 09 膨脹的木棍

描述 當長度為l的一根細木棍的溫度公升高n度,它會膨脹到新的長度l 1 n c l,其中c是熱膨脹係數。當一根細木棍被嵌在兩堵牆之間被加熱,它將膨脹形成弓形的弧,而這個弓形的弦恰好是未加熱前木棍的原始位置。你的任務是計算木棍中心的偏移距離。輸入三個非負實數 木棍初始長度 單位 公釐 溫度變化 單位 ...

1246 膨脹的木棍

1246 膨脹的木棍 題目描述 當長度為l的一根細木棍的溫度公升高n度,它會膨脹到新的長度l 1 n c l,其中c是熱膨脹係數。當一根細木棍被嵌在兩堵牆之間被加熱,它將膨脹形成弓形的弧,而這個弓形的弦恰好是未加熱前木棍的原始位置。你的任務是計算木棍中心的偏移距離。輸入 三個非負實數 木棍初始長度 ...