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;
}