【20171005】Openjudge 1.11-09 膨胀的木棍

不得不说,写这道题的时候,我也快膨胀了~~~

总时间限制:
1000ms
内存限制:
65536kB
描述

当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。

当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形成弓形的弧,而这个弓形的弦恰好是未加热前木棍的原始位置。

你的任务是计算木棍中心的偏移距离。

输入
三个非负实数:木棍初始长度(单位:毫米),温度变化(单位:度),以及材料的热膨胀系数。
保证木棍不会膨胀到超过原始长度的1.5倍。
输出
木棍中心的偏移距离(单位:毫米),保留到小数点后第三位。
样例输入
1000 100 0.0001
样例输出
61.329
来源
Waterloo local 2004.06.12

生活总是充满了欢乐,这根小木棍感受到了夏日浓浓的热情,也禁不住膨胀起来了~~~

那么,是谁那么无聊让我们去算它膨胀了多少呢?

这个神奇的“偏移距离”

 

 1 #include<stdio.h>
 2 #include<math.h>
 3 double searchN(double l,double ln,double head,double end)
 4 {
 5     double mid,r,ln_temp,temp;
 6     mid=(head+end)/2.0;//mid是猜测的弧度 
 7     while(fabs(ln_temp-ln)>=1e-14)
 8     {
 9     mid=(head+end)/2;
10         r=(l/2.0)/sin(mid/2.0);
11         ln_temp=mid*r;
12         if(ln_temp-ln>=1e-14)
13         {
14             temp=mid;
15             end=temp;
16             continue;
17         }
18         else if(ln_temp-ln<-1e-14)
19         {
20             temp=mid;
21             head=temp;
22             continue;
23         }
24     }
25     return mid;
26 }
27 int main()
28 {
29     double c,n,l;
30     double ln;//L_New
31     scanf("%lf%lf%lf",&l,&n,&c);
32     ln=(1+n*c)*l;
33     
34     double k=searchN(l,ln,0,M_PI);
35     double h=(l/2.0)/sin(k/2)-(l/2.0)/tan(k/2);
36     
37     printf("%.3f\n",h);
38     return 0;
39 }

 

posted @ 2017-10-05 15:56  Cxsheng  阅读(386)  评论(0编辑  收藏  举报