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

所以:(不要小看水题,虽然我个小辣鸡没有任何看不起它的意思)唉,还得推导公式,难受)

            poj 3299

本人较笨,写函数方法的时候若是只用两个参数,一个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;

}