UvaOJ 537 - Artificial Intelligence?
2012-04-09 21:50
274 查看
题目
字符串处理
有个地方不知道为什么那样会wa,详见注释。
另外我采用的是一行读入,然后进行字符串parse,比较麻烦。
可以采用istringstream或sscanf等,从字符串再进行格式化读入,比较好。参考:/article/5873404.html
、 http://www.cppblog.com/rakerichard/archive/2011/04/07/143608.html
代码:
字符串处理
有个地方不知道为什么那样会wa,详见注释。
另外我采用的是一行读入,然后进行字符串parse,比较麻烦。
可以采用istringstream或sscanf等,从字符串再进行格式化读入,比较好。参考:/article/5873404.html
、 http://www.cppblog.com/rakerichard/archive/2011/04/07/143608.html
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<iomanip> using namespace std; double P, I, U; double cal(int p, int i, int u) { if(!u) return P/I; else if(!p) return U*I; else if(!i) return P/U; } double s2d(string s) { double ret = 0.0; int ispre = 0; int isdot = 0; int dot = 1; for(int i=0; i<(int)s.length(); i++) { if(s[i]=='m' || s[i]=='k' || s[i]=='M') { ispre=1; break; } if(s[i] == '.') { isdot = 1; continue; } if(isdot) dot*=10; ret = ret*10+s[i]-'0'; } ret/=(double)dot; if(ispre) { switch(s[s.length()-1]) { case 'm': ret/=1000; break; case 'k': ret*=1000; break; case 'M': ret*=1000000; break; } } return ret; } int isp, isi, isu; double solve(string s) { isp=0, isi=0, isu=0; int p1 = s.find("U=", 0); int p2 = s.find("I=", 0); int p3 = s.find("P=", 0); if(p1 != -1) { isu = 1; int p = s.find('V', p1); string t = s.substr(p1+2, p-p1-2); U = s2d(t); } if(p2 != -1) { isi = 1; int p = s.find('A', p2); string t = s.substr(p2+2, p-p2-2); I = s2d(t); } if(p3 != -1) { isp = 1; int p = s.find('W', p3); string t = s.substr(p3+2, p-p3-2); P = s2d(t); } return cal(isp, isi, isu); } int main() { int t; cin>>t; cin.get(); for(int i=1; i<=t; i++) { string s; getline(cin, s); cout<<"Problem #"<<i<<endl; /* 用cout,直接输出函数返回值,WA if(!isp) cout<<"P"; else if(!isi) cout<<"I"; else if(!isu) cout<<"U"; cout<<"="<<setiosflags(ios::fixed)<<setprecision(2)<<solve(s); if(!isp) cout<<"W"; else if(!isi) cout<<"A"; else if(!isu) cout<<"V"; cout<<endl; cout<<endl; */ // 用cout,先把函数返回值赋给ans,再输出ans,AC double ans = solve(s); if(!isp) cout<<"P"; else if(!isi) cout<<"I"; else if(!isu) cout<<"U"; cout.setf(ios::fixed); cout.precision(2); cout<<"="<<ans; if(!isp) cout<<"W"; else if(!isi) cout<<"A"; else if(!isu) cout<<"V"; cout<<endl; cout<<endl; /* 用 printf AC。 double ans = solve(s); if(!isp) printf("P=%.2fW\n", ans); else if(!isi) printf("I=%.2fA\n", ans); else if(!isu) printf("U=%.2fV\n", ans); printf("\n"); */ } }
相关文章推荐
- UVAOJ 537 ——Artificial Intelligence? 模拟
- UVAOJ 537字符串处理
- UVaOJ 537 - Artificial Intelligence?
- UVaOJ 537 - Artificial Intelligence?
- UvaOJ 537 - Artificial Intelligence?
- UvaOJ 537 - Artificial Intelligence?
- UVaOJ 537
- UvaOj 题目难度分析表
- UVa 537 - Artificial Intelligence?
- UvaOj 401 - Palindromes
- UvaOJ 568 - Just the Facts
- 537 - Artificial Intelligence?
- UVaOJ 705 - Slash Maze
- STL:lower_bound & upper_bound & binary_search (UVaOJ 146)
- (转)(Step1-500题)UVaOJ(算法比赛入门经典+挑衅编程)+USACO
- UVaOJ 10494 - If We Were a Child Again
- UVAOJ的注册和评测入门
- UVaOJ 156 - Ananagrams
- UVAOJ--10718 Bit Mask
- UVaOJ10305---Ordering Tasks