【题目描述】
当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。
当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形成弓形的弧,而这个弓形的弦恰好是未加热前木棍的原始位置。
你的任务是计算木棍中心的偏移距离。
【输入格式】
三个非负实数:木棍初始长度(单位:毫米),温度变化(单位:度),以及材料的热膨胀系数。
保证木棍不会膨胀到超过原始长度的1.5倍。
【输出格式】
木棍中心的偏移距离(单位:毫米),保留到小数点后第三位。
【代码】
1 #include<bits/stdc++.h> 2 #define pi 3.1415926 3 4 using namespace std; 5 const double e=1e-14; 6 double n,m,k,t; 7 double calc(double x){ 8 double y=n/2/sin(x); 9 return 2*y*x; 10 } 11 int main() 12 { 13 cin>>n>>m>>k; 14 t=(1+m*k)*n;//先计算长度 15 double l=0.000000000001,r=pi/2; 16 while(r-l>e){ 17 double mid=(l+r)/2; 18 if(calc(mid)<t) l=mid; 19 else r=mid; 20 } 21 printf("%0.3lf",(n/2/sin(l)-n/2/tan(l))); 22 return 0; 23 }