首页 > 代码库 > 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?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。