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));
}
}
}