總時間限制: 1000ms 記憶體限制: 65536kb
描述
當長度為l的一根細木棍的溫度公升高n度,它會膨脹到新的長度l'=(1+n*c)*l,其中c是熱膨脹係數。
當一根細木棍被嵌在兩堵牆之間被加熱,它將膨脹形成弓形的弧,而這個弓形的弦恰好是未加熱前木棍的原始位置。
你的任務是計算木棍中心的偏移距離。
輸入三個非負實數:木棍初始長度(單位:公釐),溫度變化(單位:度),以及材料的熱膨脹係數。
保證木棍不會膨脹到超過原始長度的1.5倍。
輸出木棍中心的偏移距離(單位:公釐),保留到小數點後第三位。
樣例輸入
1000 100 0.0001樣例輸出
61.329參考:
1 #include2 #include3一定要注意:我們需要二分的內容是當前角度,那麼角度的範圍可以很容易發現,因為木棍長度不超過1.5倍那麼就定角度為0-#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 }
π因為如果圓心角過小會發現半徑十分的大根本存不下,其實這種情況的時候木棍長度的變化也是十分的小的那麼
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 #include4view codeintmain() 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 }
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是熱膨脹係數。當一根細木棍被嵌在兩堵牆之間被加熱,它將膨脹形成弓形的弧,而這個弓形的弦恰好是未加熱前木棍的原始位置。你的任務是計算木棍中心的偏移距離。輸入 三個非負實數 木棍初始長度 ...