#include <stdio.h>
#include<iostream>
#include<sstream>
#include <string.h>
using namespace std;
char state[1000];
int main()
{
int n;
scanf("%d",&n);
getchar();
for(int j=0;j<n;j++)
{
char a[3]={0};
int flag=-1;
fgets(state,1000,stdin);
double P=0,U=0,I=0;
int len=strlen(state);
for(int i=0;i<len;i++)
{
if(state[i]=='=')
{
double tem=0;
char pre;
int t=1;
sscanf(&state[i]+1,"%lf%c",&tem,&pre);
if(pre=='m') t=0.001;
else if(pre=='k') t=1000;
else if(pre=='M') t=1000000;
tem*=t;
if(state[i-1]=='P')
{
P=tem;
a[0]=1;
}
else if(state[i-1]=='U')
{
U=tem;
a[1]=1;
}
else if(state[i-1]=='I')
{
I=tem;
a[2]=1;
}
}
}
for(int m=0;m<3;m++)
{
if(a[m]==0) flag=m;
}
// cout<<P<<" "<<U<<" "<<I<<endl;
if(flag==0) printf("Problem #%d\nP=%.2lfW\n\n",j+1,U*I);
if(flag==1) printf("Problem #%d\nU=%.2lfV\n\n",j+1,P/I);
if(flag==2) printf("Problem #%d\nI=%.2lfA\n\n",j+1,P/U);
}
return 0;
}
上面我的代码是wa。找了很久很久的bug都没找到。要是有好心人找到了,小弟五体投地。。
下面是别人的ac代码
#include <stdio.h>
#include <string.h>
#define N 1000
char s[N];
char f1[] = "UIP";
char f2[] = "mkM";
char f3[] = "VAW";
double sum[3];
double r[3] = {0.001,1000.00,1000000.00};
char pre;
int main()
{
int t,j,flag,i,k;
int count = 1;
double res;
scanf("%d", &t);
getchar();
while(t--)
{
memset(sum,0,sizeof(sum));
fgets(s,N,stdin);
for(i = 0; i < strlen(s); i++)
{
if(s[i+1] == '=')
{
for(j = 0; f1[j] != s[i]; j++)
{
;
}
sscanf(&s[i]+2,"%lf%c",&sum[j],&pre);
//printf("%lf %c\n",sum[j],pre);
for(k = 0; k < 3; k++)
{
if(pre == f2[k])
{
sum[j] *= r[k];
}
}
}
}
for(i = 0; i < 3; i++)
{
if(sum[i] == 0)
{
flag=i;
}
}
if(flag==0)
{
res = sum[2]/sum[1];
}
else if(flag==1)
{
res = sum[2]/sum[0];
}
else
{
res = sum[0]*sum[1];
}
printf("Problem #%d\n%c=%.2lf%c\n\n",count++,f1[flag],res,f3[flag]);
} return 0;
}