HDU3299

POJ3299湿润指数

本题给出3个浮点数,分别代表humidex,dewpoint,temperature,然后给出这3个数的转换公式,要求给出任意两个,输出所有3个数且保留小数点后一位小数。公式为:

humidex = temperature + h

h = (0.5555)× (e - 10.0)

e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]

输入:H,D,T字母分别代表3个对应的数据。格式为T 30 D 15 之类的。其中H D T 都是-100到100之间的数。

输出:所有3个数据。格式为 T 30.0 D 15.0 H 34.0

分析:根据给出的公式,当知道d与t或d与h时能很轻松的算出第三个,现在知道h与t时,要算d。注意:求d要只用一步公式,用中间变量的结果是wrong。

代码:

#include<cstdio>
#include<cmath>
using namespace std;
double h,t,d;
double get_t()
{
   double e = (6.11*exp(5417.7530 * ((1/273.16) - (1/(d+273.16)))));
   return h-(0.5555)*(e-10.0);
}
double get_h()
{
   double e = (6.11*exp(5417.7530 * ((1/273.16) - (1/(d+273.16)))));
   return t+(0.5555)*(e-10.0);
}
double get_d()
{
   return 1/((1/273.16)-log(((h-t)/0.5555+10.0)/6.11)/5417.7530)-273.16;
}
int main()
{
   char s1[100],s2[100];
   double a,b;
   while(scanf("%s",s1)==1)
    {
       h=t=d=-1000;
       if(s1[0]=='E')break;
       scanf("%lf%s%lf",&a,s2,&b);
       switch(s1[0])
       {
       case'T':
           t=a;
           break;
       case'D':
           d=a;
           break;
       case'H':
           h=a;
           break;
       }
       switch(s2[0])
       {
       case'T':
           t=b;
            break;
       case'D':
           d=b;
           break;
       case'H':
           h=b;
           break;
       }
       if(t<-200)
       {
           t=get_t();
       }
       else if(d<-200)
       {
           d=get_d();
       }
       else
       {
           h=get_h();
       }
       printf("T %.1lf D %.1lf H %.1lf\n",t,d,h);
    }
   return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值