首页 > 代码库 > UVA - 537 Artificial Intelligence?

UVA - 537 Artificial Intelligence?


http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22452

这道题 题意很简单,就是在一行字符串中给定电压(U)电流(I)功率(P)3个中的任意两个让你求另外一个,注意字符串只包含两个等于符号,并且在3个数值的后面有可能有前缀,也就是说有kV,mA,MW等等,k代表1000,m代表0.001 M代表1000000.

不过做起来感觉真揪心,没有想到一种好的办法,写出来的代码又长又乱,提交总是wrong,明明就几种情况,还是想不出哪里错了,无奈参考了别人的代码,果然是很简洁,还是自己题做少了,没有经验。

关键点还是字符串中 只有两个等于号,那么每次找到等于号,然后读入后面的数字,进行相应的转换即可。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
#include <string>
#include <set>
#include <functional>
#include <numeric>
#include <sstream>
#include <stack>
#include <map>
#include <queue>

#define CL(arr, val)    memset(arr, val, sizeof(arr))

#define ll long long
#define inf 0x7f7f7f7f
#define lc l,m,rt<<1
#define rc m + 1,r,rt<<1|1
#define pi acos(-1.0)

#define L(x)    (x) << 1
#define R(x)    (x) << 1 | 1
#define MID(l, r)   (l + r) >> 1
#define Min(x, y)   (x) < (y) ? (x) : (y)
#define Max(x, y)   (x) < (y) ? (y) : (x)
#define E(x)        (1 << (x))
#define iabs(x)     (x) < 0 ? -(x) : (x)
#define OUT(x)  printf("%I64d\n", x)
#define lowbit(x)   (x)&(-x)
#define Read()  freopen("a.txt", "r", stdin)
#define Write() freopen("dout.txt", "w", stdout);
#define N 100005
using namespace std;

int main()
{
   //Read();
   int n,k,i,j;
   char c;
   double a,w,P,U,I;
   scanf("%d",&n);
   getchar();
   for(k=1;k<=n;k++)
   {
       P=0;U=0;I=0;
       for(j=0;j<2;j++)
       {
            while(scanf("%c",&c))
            if(c=='=') break;
            scanf("%lf%c",&a,&c);
            w=1;
            if(c=='m') {w=0.001;scanf("%c",&c);}
            if(c=='k') {w=1000;scanf("%c",&c);}
            if(c=='M') {w=1000000;scanf("%c",&c);}
            a*=w;
            if(c=='A') I=a;
            if(c=='V') U=a;
            if(c=='W') P=a;
            //printf("%.2lf\n",a);
       }
       printf("Problem #%d\n",k);
       if(U&&I) printf("P=%.2lfW\n",U*I);
       if(U&&P) printf("I=%.2lfA\n",P/U);
       if(I&&P) printf("U=%.2lfV\n",P/I);
       printf("\n");
   }
   return 0;
}



UVA - 537 Artificial Intelligence?