不得不说,写这道题的时候,我也快膨胀了~~~
-
总时间限制:
- 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 }