POJ 3299 - Humidex


问题描述

无。

解题思路

纯粹的数学公式,直接求解即可。

AC 源码

Download Link

/*
    Author:     Exp
    Date:       2017-11-29
    Code:       POJ 3299
    Problem:    Humidex
    URL:        http://poj.org/problem?id=3299
*/

/*
    题意分析:
     已知温度转换公式:
      humidex = temperature + h
      h = (0.5555)× (e - 10.0)
      e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]

    令 H = humidex,temperature = T,dewpoint = D, 其中 H,T,D ∈ [-100, 100]
    给定其中两个,求另一个 (输出精度为1位小数)
*/

#include <math.h>
#include <iomanip>
#include <iostream>
using namespace std;

const static char T = 'T';
const static char D = 'D';
const static char H = 'H';
const static char E = 'E';
const static double INVALD_VAL = 999.0;    // 所有参数取值范围为[-100, 100]


/* 
 * 根据公式以及其中两个参数,求解第三个参数
 * @param nT 参数T,可能为无效值
 * @param nD 参数D,可能为无效值
 * @param nH 参数H,可能为无效值
 * return 第三个参数值
 */
void solve(double *nT, double *nD, double *nH);    // POJ上的C++编译器不支持&引用传值, 只能用指针


int main(void) {

    while(true) {
        bool isEnd = false;
        char letter = E;
        double nT, nD, nH;
        nT = nD = nH = INVALD_VAL;

        for(int i = 0; !isEnd && i < 2; i++) {
            cin >> letter;
            switch(letter) {
                case T: { cin >> nT; break; }
                case D: { cin >> nD; break; }
                case H: { cin >> nH; break; }
                default: { isEnd = true; break; }
            }
        }

        if(isEnd == true) {
            break;

        } else {
            solve(&nT, &nD, &nH);
            cout << fixed << setprecision(1) << "T " << nT << " D " << nD << " H " << nH << endl;
        }
    }
    return 0;
}


void solve(double *nT, double *nD, double *nH) {
    if(*nH == INVALD_VAL) {
        *nH= *nT + 0.5555 * (6.11 * exp(5417.7530 * ( 1.0 / 273.16 - 1.0 / (*nD + 273.16))) - 10.0);

    } else if(*nT == INVALD_VAL) {
        *nT= *nH - 0.5555 * (6.11 * exp(5417.7530 * ( 1.0 / 273.16 - 1.0 / (*nD + 273.16))) - 10.0);

    } else {
        *nD= 1.0 / ((1.0 / 273.16) - ((log((((*nH - *nT) / 0.5555) + 10.0) / 6.11)) / 5417.7530)) - 273.16;
    }
}

相关资料


文章作者: EXP
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 EXP !
 上一篇
POJ 1011 - Sticks POJ 1011 - Sticks
POJ 1011 - Sticks Time: 1000MS Memory: 10000K 难度: 初级 分类: 搜索 问题描述2011 POJ 暑假集训题 Problem E,POJ上有中文版。 解题思路DFS+剪枝 [POJ2362
2011-06-01
下一篇 
POJ 3007 - Organize Your Train part II POJ 3007 - Organize Your Train part II
POJ 3007 - Organize Your Train part II Time: 1000MS Memory: 65536K 难度: 中级 分类: 基础算法 问题描述给定一个字符串,从任意位置把它切为两半,得到两条子串 定义 子
2011-05-20
  目录