poj 3299
一开始没注意题目,以为给特定T、D值求H值,结果WA掉
#include<stdio.h>
#include<math.h>
int main()
{
float temperature,h,humidex,dewpoint,e;
float e1,e2,e3; // e1代表 1/273.16 ,e2代表 1/(dewpoint + 273.16) ,e3代表 5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))
char c,c1;
while(scanf("%c",&c)!=EOF)
{
if (c == 'E')
break;
scanf("%f %c %f",&temperature,&c1,&dewpoint);
e1 = 1/273.16;
e2 = 1/(dewpoint + 273.16);
e3 = 5417.7530*(e1 - e2);
e = 6.11 * exp(e3);
h = 0.5555 * (e - 10.0);
humidex = temperature + h;
printf("T %.1f D %.1f H %.1f\n",temperature,dewpoint,humidex);
}
return 0;
}
仔细审视题目你会发现本题时是给定任意的TDH值中的两个让你求第三个,也就是说总共有6种可能:
TD → H
DT → H
DH→ T
HD → T
TH →D
HT → D
所以:(不要小看水题,虽然我个小辣鸡没有任何看不起它的意思)唉,还得推导公式,难受)
本人较笨,写函数方法的时候若是只用两个参数,一个d,一个t的话就不用写那六个函数了,唉
但是目前这个提交还是WA,希望能够得到大神指点
/*humidex = temperature + h
h = (0.5555)× (e - 10.0)
e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]
temperature T , D dewpoint , H humidex */
#include<stdio.h>
#include<math.h> //编译有问题: TH > D 、 HD > T 、
void td(float temperature,float dewpoint)
{
float e1,e2,e3,e,h,humidex; // e1代表 1/273.16 ,e2代表 1/(dewpoint + 273.16) ,e3代表 5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))
e1 = 1/273.16;
e2 = 1/(dewpoint + 273.16);
e3 = 5417.7530*(e1 - e2);
e = 6.11 * exp(e3);
h = 0.5555 * (e - 10.0);
humidex = temperature + h;
printf("T %.1f D %.1f H %.1f\n",temperature,dewpoint,humidex);
}
void dt(float dewpoint,float temperature)
{
float e1,e2,e3,e,h,humidex;
e1 = 1/273.16;
e2 = 1/(dewpoint + 273.16);
e3 = 5417.7530*(e1 - e2);
e = 6.11 * exp(e3);
h = 0.5555 * (e - 10.0);
humidex = temperature + h;
printf("D %.1f T %.1f H %.1f\n",dewpoint,temperature,humidex);
}
void th(float temperature,float humidex)
{
float dewpoint,z,e1,e2, //将题中给的e转变为z,
h = humidex - temperature;
z = h / 0.555 + 10.0;
e1 = ( log( z / 6.11) )/ 5417.7530;
e2 = 1 / 273.16 - e1;
dewpoint = 1 / e2 - 273.16;
printf("T %.1f H %.1f D %.1f",temperature,humidex,dewpoint);
}
void ht(float humidex,float temperature)
{
float dewpoint,z,e1,e2, //将题中给的e转变为z,
h = humidex - temperature;
z = h / 0.555 + 10.0;
e1 = ( log( z / 6.11) )/ 5417.7530;
e2 = 1 / 273.16 - e1;
dewpoint = 1 / e2 - 273.16;
printf("H %.1f T %.1f D %.1f",humidex,temperature,dewpoint);
}
void dh(float dewpoint,float humidex)
{
float e1,e2,e3,e,h,temperature;
e1 = 1/273.16;
e2 = 1/(dewpoint + 273.16);
e3 = 5417.7530*(e1 - e2);
e = 6.11 * exp(e3);
h = 0.5555 * (e - 10.0);
temperature = humidex - h;
printf("D %.1f H %.1f T %.1f\n",dewpoint,humidex,temperature);
}
void hd(float humidex,float dewpoint)
{
float e1,e2,e3,e,h,temperature;
e1 = 1/273.16;
e2 = 1/(dewpoint + 273.16);
e3 = 5417.7530*(e1 - e2);
e = 6.11 * exp(e3);
h = 0.5555 * (e - 10.0);
temperature = humidex - h;
printf("H %.1f D %.1f T %.1f\n",humidex,dewpoint,temperature);
}
int main()
{
float temperature,dewpoint,humidex;
char c,c1;
while(scanf("%c",&c)!=EOF)
{
void td(float temperature,float dewpoint);
void th(float temperature,float humidex);
void dh(float dewpoint,float humidex);
if (c == 'E')
break;
else if (c == 'T')
{
scanf("%f %c",&temperature,&c1);
if (c1 == 'D')
{
scanf("%f",&dewpoint);
td(temperature,dewpoint);
}
else if (c1 == 'H')
{
scanf("%f",&humidex);
th(temperature,humidex);
}
}
else if (c == 'D')
{
scanf("%f %c",&dewpoint,&c1);
if (c1 == 'H')
{
scanf("%f",&humidex);
dh(dewpoint,humidex);
}
else if (c1 == 'T')
{
scanf("%f",&temperature);
dt(dewpoint,temperature);
}
}
else if (c == 'H')
{
scanf("%f %c",&humidex,&c1);
if (c1 == 'D')
{
scanf("%f",&dewpoint);
hd(humidex,dewpoint);
}
if (c1 == 'T')
{
scanf("%f",&temperature);
ht(humidex,temperature);
}
}
// scanf("%f %c %f",&temperature,&c1,&dewpoint); //以**释部分为单独scanf并计算某一种可能时的代码
// scanf("%f %c %f",&dewpoint,&c1,&humidex);
// scanf("%f %c %f",&temperature,&c1,&humidex);
/*if (c == 'T' && c1 == 'D')
td(temperature,dewpoint);
else if (c == 'D' && c1 == 'T')
td(dewpoint,temperature);
else if (c == 'T' && c1 == 'H')
th(temperature,humidex);
else if (c == 'H' && c1 == 'T')
th(humidex,temperature);
else if (c == 'D' && c1 == 'H')
dh(dewpoint,humidex);
else if(c == 'H' && c1 == 'D')
dh(humidex,dewpoint); */
}
return 0;
}