题解 | Mileage Bank
#include <bits/stdc++.h> using namespace std; int main(){ string from,to,level; int a; int ans=0; while(cin>>from){ if(from=="0")break; cin>>to>>a>>level; if(level=="Y"){ ans+=a>500?a:500; }else if(level=="B"){ ans+=a%2==0?a+a/2:a+a/2+1; }else ans+=a*2; } cout<<ans<<endl; }
#include <bits/stdc++.h> using namespace std; int main(){ string from,to,level; int a; float ans=0; while(cin>>from){ if(from=="0")break; cin>>to>>a>>level; if(level=="Y"){ ans+=a>500?a:500; }else if(level=="B"){ ans+=a+a/2; }else ans+=a*2; } printf("%.0f",ans); }
本题主要是读题,垃圾信息太多了,本质上就是0就退出,其他就是三个等级,Y就是低级,但是尽管低级也会至少给你500的数值,然后B是中等,这个等级会给/2的额外信息,但是因为要四舍五入,所以可以按照上述写法一写,其实还有个更好写的,就是第二个解法,自动四舍五入,这里就这一个额外要求,对于最高级的,我们直接给双倍,这就是这题要干的事。