POJ3299题解
解题重点在如下几个地方
第一:正确接收来自输入流的数据
第二:将数学公式正确翻译成C语言公式
第三:题目意思是任给两个变量求第三个,而不是像输入样例那样只给你T、D
SOURCE
代码质量如下:
Problem: 3299 User: 20132430222
Memory: 212K Time: 0MS
Language: C Result: Accepted
附源码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MAXLEN 100
int main()
{
char ch;
float T[MAXLEN],D[MAXLEN],H[MAXLEN];
int flag[MAXLEN];
int i=0;
//while(4==scanf("%c %f %c %f\n",&ch1,&T[i],&ch2,&D[i])){
// //getchar();
// i++;
//}
int flagT = 0,flagD = 0,flagH = 0;
while(1){
scanf("%c",&ch);
if(ch=='E')
break;
switch(ch){
case 'T':
scanf("%f ",&T[i]);
flagT = 1;
break;
case 'D':
scanf("%f ",&D[i]);
flagD = 1;
break;
case 'H':
scanf("%f ",&H[i]);
flagH = 1;
break;
}
scanf("%c",&ch);
switch(ch){
case 'T':
scanf("%f\n",&T[i]);
flagT = 1;
break;
case 'D':
scanf("%f\n",&D[i]);
flagD = 1;
break;
case 'H':
scanf("%f\n",&H[i]);
flagH = 1;
break;
}
if(flagT==1&&flagD==1)
flag[i]=1;
if(flagT==1&&flagH==1)
flag[i]=2;
if(flagD==1&&flagH==1)
flag[i]=3;
flagT = 0;
flagD = 0;
flagH = 0;
i++;
}
int j;
for(j=0;j<i;j++){
switch(flag[j]){
case 1:
H[j] = T[j] + 0.5555*((6.11*pow(2.718281828,(5417.7530*((1.0/273.16)-(1.0/(D[j]+273.16))))))-10.0);
printf("T %.1f D %.1f H %.1f\n",T[j],D[j],H[j]);
break;
case 2:
D[j] = (1.0/((1.0/273.16)-((log((((H[j]-T[j])/0.5555)+10.0)/6.11))/5417.7530)))-273.16;
printf("T %.1f D %.1f H %.1f\n",T[j],D[j],H[j]);
break;
case 3:
T[j] = H[j] - 0.5555*((6.11*pow(2.718281828,(5417.7530*((1.0/273.16)-(1.0/(D[j]+273.16))))))-10.0);
printf("T %.1f D %.1f H %.1f\n",T[j],D[j],H[j]);
break;
}
}
//system("pause");
return 0;
}