弯曲的木棍

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

当长度为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
来源

POJ 1905


正解如下:

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
double L,n,C,b,R,AI,b1,mid,l,r;
int main()
{
    while(scanf("%lf %lf %lf",&L,&n,&C))
    {
        if(L==-1&&n==-1&&C==-1)
            return 0;
        l=0,r=L/2;
        b=(1+n*C)*L;
        while(r-l>=1e-4)
        {
            mid=(l+r)/2;
            R=(mid*mid+L*L/4)/(2*mid);
            AI=asin(L/2/R);
            b1=2*AI*R;
            if(b==b1)
                break;
            else if(b1<b)
                    l=mid;
                else
                    r=mid;
        }
        printf("%.3lf\n",mid);
    }
    return 0;
}
谢谢!



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值