膨胀的木棍


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

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

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

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


输入
三个非负实数:木棍初始长度(单位:毫米),温度变化(单位:度),以及材料的热膨胀系数。
保证木棍不会膨胀到超过原始长度的1.5倍。
输出
木棍中心的偏移距离(单位:毫米),保留到小数点后第三位。
样例输入
1000 100 0.0001
样例输出
61.329
代码
#include<cstdio>
#include<cmath>
double L,n,c,b,b1,l,r,R,hd;
int main()
{
	scanf("%lf %lf %lf",&L,&n,&c);
	b=(1+n*c)*L;L/=2;b/=2;//计算出膨胀后的木棍
	l=0;r=L;/*膨胀的偏移距离最小为0,最大本为1.5*L,
	但取略大值L/2*π,所以最大值取L/2,L已经平分*/
	while(l+1e-4<=r)//循环条件,注意精度值(保留到小数点后第三位)
	{
		double mid=(l+r)/2;
		R=(L*L+mid*mid)/(2*mid);//勾股定理化简(R-mid)²+L²=R²
		hd=asin(L/R);//计算弧度,正弦定理
		b1=hd*R;//弧长计算公式
		if(b1<b)	l=mid;//如果小于,证明取值偏小,修改边界
		else r=mid;
	}
	printf("%.3lf",l);
}
思路最开始我看到这道题时,一脸懵逼,什么?经过同学和老师的讲解,渐渐明白思路。1.了解清楚弧长计算公式2.设偏移距离为x,用勾股定理计算半径,算出弧长3.判断弧长与实际的偏差,调整边界最后,做出来啦~~~*写博客的字体真不好调整,习惯了就会好些吧?*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值