版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
弯曲的木棍点击打开链接
- 总时间限制:
- 1000ms
- 描述
-
当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n×C)×L,其中C是热膨胀系数。
当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形成弓形的弧,而这个弓形的弦恰好是未加热前木棍的原始位置。
你的任务是计算木棍中心的偏移距离h。 - 输入
- 输入包含多行,每行输入包括3个 非负数:细木棍的初始长度L,温度的变化n,材料的热膨胀系数C。输入数据保证细木棍伸长的长度 不会超过原长的一半,最后一行为3个-1, 不做处理。
- 输出
- 对每一行输入,输出细木棍的中心在受热前后移动的距离,精确到 小数点后3位。
- 样例输入
-
1000 100 0.0001 15000 10 0.00006 10 0 0.001 -1 -1 -1
- 样例输出
-
61.329 225.020 0.000
源码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
double L,n,c,l,r,b;
void tann(double l,double r)
{
double mid=(l+r)/2,R=(mid*mid+L*L/4)/(2*mid),b1=2*asin(L/2/R)*R;
if(r-l<1e-4)//控制精度于0.0001
printf("%.3lf\n",mid);
else
if(b1==b)
printf("%.3lf\n",mid);
else
if(b1<b)
tann(mid,r);
else
tann(l,mid);
}//分治求值
int main()
{
while(scanf("%lf %lf %lf",&L,&n,&c))//循环输入
{
if(L==-1)
return 0;
b=(1+n*c)*L;
tann(0,L/2);
}
return 0;
}
谢谢观赏!!!