POJ3299 -- Humidex



POJ3299 -- Humidex

Submit1:Wrong Answer

#include<stdio.h>
#include<math.h>
int main(){
    char flag;
    double temperature,dew_point;
    while(scanf("%c",&flag)!=EOF&&flag!='E'){
        scanf(" %lf D %lf",&temperature,&dew_point);
        //printf("%f%f",temperature,dew_point);
        /*  humidex = temperature + h
            h = (0.5555)× (e - 10.0)
            e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]
            where exp(x) is 2.718281828 raised to the exponent(指数) x. */
        printf("T %.1f D %.1f H %.1f\n",temperature,dew_point,temperature + (0.5555)*(6.11 * pow(2.718281828,5417.7530 * (1/273.16 - 1/(dew_point+273.16)))  - 10.0));
        getchar();
    }
    return 0;
}

Submit2:Wrong Answer

#include<stdio.h>
#include<math.h>
int main(){
    char flag;
    float temperature,dew_point;
    while(scanf("%c",&flag)!=EOF&&flag!='E'){
        //参考:http://poj.org/showmessage?message_id=344553
        scanf(" %f D %f",&temperature,&dew_point);
        //printf("%f%f",temperature,dew_point);
        /*  humidex = temperature + h
            h = (0.5555)× (e - 10.0)
            e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]
            where exp(x) is 2.718281828 raised to the exponent(指数) x. */
        printf("T %.1f D %.1f H %.1f\n",temperature,dew_point,temperature + (0.5555)*(6.11 * pow(2.718281828,5417.7530 * (1/273.16 - 1/(dew_point+273.16)))  - 10.0));
        getchar();
    }
    return 0;
}

审题错误

参考:http://poj.org/showmessage?message_id=351641

Each letter specifies the meaning of the number that follows it, and will be either T, indicating temperature, D, indicating dewpoint, or H, indicating humidex.

与输入数据的类型是float还是double无关。题目想表达的是三个参数中,输入数据给任意两个求第三个。我前两次WA都以为只会给temperature和dewpoint,求humidex。

Submit3:Accepted

 

//审题错误。参考:http://poj.org/showmessage?message_id=351641
#include<stdio.h>
#include<math.h>
#define exp 2.718281828
int main()
{
    char flag;
    double temperature,dew_point,humidex;
    while(1)
    {
        temperature=dew_point=humidex=200;
        while((flag=getchar())!='\n')
        {
            //printf("=flag=%c==\n",flag);
            switch(flag)
            {
            case 'T':
                scanf("%lf",&temperature);
                //printf("temperature==%.1f==\n",temperature);
                break;
            case 'D':
                scanf("%lf",&dew_point);
                //printf("dew_point==%.1f==\n",dew_point);
                break;
            case 'H':
                scanf("%lf",&humidex);
                //printf("humidex==%.1f==\n",humidex);
                break;
            case 'E':
                return 0;
            }
            //printf("=temperature=%.1f=dew_point=%.1f=humidex=%.1f\n",temperature,dew_point,humidex);
            //getchar();
        }
        //printf("????");
        if(temperature==200)
        {
            //printf("temperature");
            /*humidex = temperature + h
            h = 0.5555* (e - 10.0)
            e = 6.11 * exp [5417.7530 * ((1/273.16) - (1/(dew_point+273.16)))]

            ==》temperature=humidex-0.5555* (6.11 * exp [5417.7530 * ((1/273.16) - (1/(dew_point+273.16)))] - 10.0)
               */
            printf("T %.1f D %.1f H %.1f\n",humidex-0.5555* (6.11 * pow(exp,5417.7530 * (1/273.16 - 1/(dew_point+273.16))) - 10.0),dew_point,humidex);
        }
        else if(dew_point==200)
        {
            //printf("dew_point");
            /*humidex = temperature + h
            h = 0.5555* (e - 10.0)
            e = 6.11 * exp [5417.7530 * ((1/273.16) - (1/(dew_point+273.16)))]
            ==》(humidex-temperature)/0.5555 + 10.0=
            6.11 * exp [5417.7530 * ((1/273.16) - (1/(dew_point+273.16)))]

            ==》((humidex-temperature)/0.5555 + 10.0)/6.11
            =exp [5417.7530 * ((1/273.16) - (1/(dew_point+273.16)))]

            ==》 1/273.16 - 1/(dew_point+273.16)
            =log(((humidex-temperature)/0.5555 + 10.0)/6.11)/5417.7530

            ==》1/(dew_point+273.16)
            =1/273.16-log(((humidex-temperature)/0.5555 + 10.0)/6.11)/5417.7530

            ==》dew_point
            =1/(1/273.16-log(((humidex-temperature)/0.5555 + 10.0)/6.11)/5417.7530)-273.16
               */
            printf("T %.1f D %.1f H %.1f\n",temperature,1/(1/273.16-log(((humidex-temperature)/0.5555 + 10.0)/6.11)/5417.7530)-273.16,humidex);
        }
        else
        {
            //printf("humidex");
            /*humidex = temperature + h
            h = 0.5555* (e - 10.0)
            e = 6.11 * exp [5417.7530 * ((1/273.16) - (1/(dew_point+273.16)))]

            ==>humidex=temperature+0.5555* (6.11 *pow( exp ,5417.7530 * (1/273.16 - 1/(dew_point+273.16))) - 10.0)
                */
            printf("T %.1f D %.1f H %.1f\n",temperature,dew_point,temperature+0.5555* (6.11 *pow( exp ,5417.7530 * (1/273.16 - 1/(dew_point+273.16))) - 10.0));
        }
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值