POJ

http://poj.org/problem?id=3299

当时入门的时候就从这个水题入手增加自信,导致自信都没了。

其实看懂公式之后前两个很简单,移一下项就可以了。

第三个需要一点耐心慢慢解出来,但也不是不行。

总之作为一道模拟是不错的。

#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;

double calc_H(double T, double D) {
    return T + (0.5555) * (6.11 * exp(5417.7530 * ((1.0 / 273.16) - 1.0 / (D + 273.16))) - 10.0);
}

double calc_T(double H, double D) {
    return H - (0.5555) * (6.11 * exp(5417.7530 * ((1.0 / 273.16) - 1.0 / (D + 273.16))) - 10.0);
}

double calc_D(double T, double H) {
    double C1 = log(((H - T) / 0.5555 + 10.0) / 6.11);
    double C2 = 1.0 / 273.16 - C1 / 5417.7530;
    return 1.0 / C2 - 273.16;
}


int main() {
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
#endif // Yinku
    char op[2];
    while(~scanf("%s", op)) {
        if(op[0] == 'E')
            break;
        bool bt = 0, bd = 0, bh = 0;
        double T, D, H;
        if(op[0] == 'D') {
            bd = 1;
            scanf("%lf", &D);
        } else if(op[0] == 'T') {
            bt = 1;
            scanf("%lf", &T);
        } else if(op[0] == 'H') {
            bh = 1;
            scanf("%lf", &H);
        }
        scanf("%s", op);
        if(op[0] == 'D') {
            bd = 1;
            scanf("%lf", &D);
        } else if(op[0] == 'T') {
            bt = 1;
            scanf("%lf", &T);
        } else if(op[0] == 'H') {
            bh = 1;
            scanf("%lf", &H);
        }
        if(bd == 0) {
            D = calc_D(T, H);
        } else if(bt == 0) {
            T = calc_T(H, D);
        } else {
            H = calc_H(T, D);
        }
        printf("T %.1f D %.1f H %.1f
", T, D, H);

    }
}
原文地址:https://www.cnblogs.com/Inko/p/11723195.html