POJ_3299

来源:互联网 发布:网络改变生活ppt 编辑:程序博客网 时间:2024/06/07 04:14
//412k  0ms#include <cstdio>#include <cmath>#define HUM(d, t) (6.11 * exp(5417.7530 * ((1 / 273.16) - (1 / (d + 273.16)))) - 10.0) * 0.5555 + t#define DEW(h, t) (1 / ((log(((h - t) / 0.5555 + 10.0) / 6.11) / 5417.7530) * (-1) + (1 / 273.16)) - 273.16)#define TEP(d, h) (h - ((6.11 * exp(5417.7530 * ((1 / 273.16) - (1 / (d + 273.16))))) - 10.0) * 0.5555)int main() {  float t, d, h;  float n[2];  char c[2];  while (scanf("%c %f %c %f", c, n, c + 1, n + 1) == 4) {    t = d = h = 101;     for (int i = 0; i < 2; ++i) {      if (c[i] == 'D') d = n[i];      if (c[i] == 'T') t = n[i];      if (c[i] == 'H') h = n[i];    }    if (t == 101) t = TEP(d, h);    if (d == 101) d = DEW(h, t);    if (h == 101) h = HUM(d, t);    printf("T %0.1f D %0.1f H %0.1f\n", t, d, h);    scanf("\n");  }  return 0;}


notes:

1. pow(), log(), log10(), exp()函数的使用

2. 使用题中给定的e = 2.718281828,可以pow(e, x); log(x) / log(e);

3. 使用inline函数和macro的memory一致, 说明也是简单替换, 重要的是在inline中可以调用函数。

4. scanf double需要%lf,printf double %f就行, scanf("\n")能确保读入一个\n;

5. 隐式类型转换会按操作符优先级和结合性进行,有时候会有坑。

6. float: +/- 3.4e +/- 38 (7);    double +/- 1.7e +/- 308(15)


optimize:

转一段代码:

//Memory   Time //240K      0MS #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 ~ 100for(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;}


原创粉丝点击