题目
当一根长度为 L 的细棒被加热 n 度时,它会膨胀到新的长度 L'=(1+nC)L,其中 C 是热膨胀系数。
当一根细棒安装在两个实心壁上然后加热时,它会膨胀并呈现出圆段的形状,原来的棒是该段的弦。
您的任务是计算杆中心位移的距离。
输入
输入包含多行。每行输入包含三个非负数:杆的初始长度(以毫米为单位)、温度变化(以度为单位)和材料的热膨胀系数。输入数据保证杆的膨胀不会超过其原始长度的一半。输入的最后一行包含三个负数,不应对其进行处理。
输出
对于每行输入,输出一行,其中杆中心的位移以毫米为单位,精度为 3 位。
样例输入
1000 100 0.0001
15000 10 0.00006
10 0 0.001
-1 -1 -1
样例输出
61.329
225.020
0.000
分析
由题意我们能知道的量为弧长l1和弦长l,我们要求中心偏移的距离d,就要找到弧长l1和弦长l怎么与中心偏移的距离d产生联系.
如图,我们发现只要找出角度就能间接求出d
我们发现角度不能直接求出,但是有一条关于角度的关系式,于是我们可以想到二分的方法来近似出角度的大小
代码
点击查看代码
#include<stdio.h>
#include<math.h>
#define pi 3.1415926535897932384626433832
int main()
{
double l,n,c,l1;
while(1)
{scanf("%lf %lf %lf",&l,&n,&c);
if(l<0&&n<0&&c<0){break;}
l1=(1+n*c)*l;
double left=0,right=pi,mid;
while(right-left>1e-12)
{
mid=(left+right)/2.0;
if(l<2*l1*sin(mid/2)/mid)
{
left=mid;
}else
{
right=mid;
}
}
printf("%.3lf\n",l1/mid*(1-cos(mid/2)));
}
return 0;
}
这个排版有点bug
标签:lf,木棍,加热,问题,角度,l1,长度,输入 From: https://www.cnblogs.com/butaihuia/p/18550399