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
原创粉丝点击