问一个POJ3299的问题,这是我看到的别人的答案:http://blog.csdn.net/lyy289065406/article/details/6642582
#include<iostream> #include<math.h> #include<string> #include<iomanip> using namespace std; int main(void) { char alpha; double t,d,h; int i; for(;;) { t=d=h=200; //三个参数的范围默认都是在-100 ~ 100 for(i=0;i<2;i++) { cin>>alpha; if(alpha=='E') return 0; else if(alpha=='T') cin>>t; else if(alpha=='D') cin>>d; else if(alpha=='H') cin>>h; } if(h==200) h=t+0.5555*(6.11*exp(5417.7530*(1/273.16-1/(d+273.16)))-10); else if(t==200) t=h-0.5555*(6.11*exp(5417.7530*(1/273.16-1/(d+273.16)))-10); else if(d==200) d=1/((1/273.16)-((log((((h-t)/0.5555)+10.0)/6.11))/5417.7530))-273.16; cout<<setprecision(1)<<fixed<<"T "<<t<<" D "<<d<<" H "<<h<<endl; } return 0; }
关于后面的if(h==200) else if(t==200) else if (d==200)这几个语句的处理不是很明白,能否给讲解一下?
多看几遍就明白了,其实是很清楚的。
比如,你输入T 30 D 15以后,那么此时H一定是200(之前有);而实际上,T D H 三者必须满足那几个公式,也就是说H是不能为200的,那么接下来就需要计算H了。此程序作者的思路很好啊,反正我是没想到。
明白了。。。果然是这个人的逻辑思维很强,谢谢啦!