HDU3299
来源:互联网 发布:域名icp备案查询 编辑:程序博客网 时间:2024/06/05 15:48
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;}
0 0