poj 2256 P U I 字符串

来源:互联网 发布:java 非web工程 log4j 编辑:程序博客网 时间:2024/05/14 20:07

题意:看输入输出应该很明了,开始理解错了,以为输入的三句话是固定的呢,原来是任意的文本信息,然后没个字符串中,会出现P,U,I数值中的其中两个,然后根据P=UI,输出另外一个变量的数值。

这道题是在heu的练习上做的,没A,后来发现是北大的原题,弄了半天终于A了,真是考验耐心的好题啊!!懒得简化代码了~ 

#include<iostream>#include<ctype.h>using namespace std;int main(){  char S[30000];  char S1[10000],S2[10000];  int N,t,len,s1,e1,s2,e2,s3,e3,i,g,h;  int flag1,flag2,flag3;  float a,b;  scanf("%d",&N);  getchar();  for(t=1;t<=N;t++)  {    flag1=flag2=flag3=0;    a=b=0;    gets(S);    len=strlen(S);       for(i=0;i<len;i++)       {         if(S[i]=='U'&&S[i+1]=='=')         {s1=i;flag1=1;}         else if(S[i]=='V'&&((S[i-1]>='0'&&S[i-1]<='9')||(S[i-1]=='m'||S[i-1]=='k'||S[i-1]=='M')))//这里优先级总弄不好,还出错,多加几个括号吧         {e1=i;}         else if(S[i]=='I'&&S[i+1]=='=')         {s2=i;flag2=1;}         else if(S[i]=='A'&&((S[i-1]>='0'&&S[i-1]<='9')||(S[i-1]=='m'||S[i-1]=='k'||S[i-1]=='M')))         e2=i;         else if(S[i]=='P'&&S[i+1]=='=')         {s3=i;flag3=1;}         else if(S[i]=='W'&&((S[i-1]>='0'&&S[i-1]<='9')||(S[i-1]=='m'||S[i-1]=='k'||S[i-1]=='M')))         e3=i;       }       if(flag1&&flag2)       {       for(g=0,h=s1+2;h<=e1;h++)       S1[g++]=S[h];             S1[g]='\0';           a=atof(S1);       //cout<<a<<endl;       if(S[e1-1]=='m')       a=a*0.001;       else if(S[e1-1]=='k')       a=a*1000.0;       else if(S[e1-1]=='M')       a=a*1000000.0;       for(g=0,h=s2+2;h<=e2;h++)       S2[g++]=S[h];       S2[g]='\0';       //cout<<S[e1];       //cout<<S2<<endl;       b=atof(S2);       if(S[e2-1]=='m')       b=b*0.001;       else if(S[e2-1]=='k')       b=b*1000.0;       else if(S[e2-1]=='M')       b=b*1000000.0;       printf("Problem #%d\n",t);       printf("P=%.2fW\n\n",a*b);       }       if(flag1&&flag3)       {       for(g=0,h=s3+2;h<=e3;h++)       S1[g++]=S[h];         S1[g]='\0';       //cout<<S1;                 a=atof(S1);       if(S[e3-1]=='m')       a=a*0.001;       else if(S[e3-1]=='k')       a=a*1000.0;       else if(S[e3-1]=='M')       a=a*1000000.0;       //cout<<a<<endl;       for(g=0,h=s1+2;h<e1;h++)       S2[g++]=S[h];       S2[g]='\0';       //cout<<S[e1]<<"啊";       //cout<<S2;       b=atof(S2);       if(S[e1-1]=='m')       b=b*0.001;       else if(S[e1-1]=='k')       b=b*1000.0;       else if(S[e1-1]=='M')       b=b*1000000.0;       printf("Problem #%d\n",t);       printf("I=%.2fA\n\n",a/b);       }       if(flag2&&flag3)       {       for(g=0,h=s3+2;h<=e3;h++)       S1[g++]=S[h];         S1[g]='\0';       //printf("e3=%d\n",e3);       //cout<<S1;                 a=atof(S1);       if(S[e3-1]=='m')       {a=a*0.001;}        else if(S[e3-1]=='k')       {a=a*1000.0;}       else if(S[e3-1]=='M')       {a=a*1000000.0;}       for(g=0,h=s2+2;h<=e2;h++)       S2[g++]=S[h];       S2[g]='\0';       //cout<<S2;       b=atof(S2);       //cout<<b<<endl;       if(S[e2-1]=='m')       {b=b*0.001;}       else if(S[e2-1]=='k')       {b=b*1000.0;}       else if(S[e2-1]=='M')       {b=b*1000000.0;}       //cout<<b;       printf("Problem #%d\n",t);       printf("U=%.2fV\n\n",a/b);       }  }  //system("pause");}//2256


原创粉丝点击