这道题目虽然是个水题,但是我当时并不会用map,后来补了一下
map版
#include <iostream>
#include <map>
#include <stdio.h>
using namespace std;
map<string,double>mp;
void init()
{
mp.insert(pair<string,double>("A",4.0));
mp.insert(pair<string,double>("A-",3.7));
mp.insert(pair<string,double>("B+",3.3));
mp.insert(pair<string,double>("B",3.0));
mp.insert(pair<string,double>("B-",2.7));
mp.insert(pair<string,double>("C+",2.3));
mp.insert(pair<string,double>("C",2.0));
mp.insert(pair<string,double>("C-",1.7));
mp.insert(pair<string,double>("D",1.3));
mp.insert(pair<string,double>("D-",1.0));
mp.insert(pair<string,double>("F",0));
}
int main()
{
int n;
string s;
while(cin>>n)
{
double ans=0;
int c=0,chu=0;
init();
for(int i=1;i<=n;i++)
{
cin>>c>>s;
if(s=="P"||s=="N")
continue;
ans+=c*mp[s];
chu+=c;
}
if(chu==0)
puts("0.00");
else printf("%.2lf\n",ans/chu);
}
return 0;
}
非map版
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
string a;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
// memset(a,0,sizeof(a));
double sum=0.0;
int ans=0;
int x;
for(int i=1; i<=n; i++)
{
cin>>x>>a ;
if(a =="P"||a =="N")
continue;
else if(a =="A")
sum+=x*4.0;
else if(a =="A-")
sum+=x*3.7;
else if(a =="B+")
sum+=x*3.3;
else if(a =="B")
sum+=x*3.0;
else if(a =="B-")
sum+=x*2.7;
else if(a =="C+")
sum+=x*2.3;
else if(a =="C")
sum+=x*2.0;
else if(a =="C-")
sum+=x*1.7;
else if(a =="D")
sum+=x*1.3;
else if(a =="D-")
sum+=x*1.0;
else if(a =="F")
sum+=x*0;
ans+=x;
}
if(ans==0&&sum==0)
printf("0.00\n");
else printf("%.2lf\n",sum/ans);
for(int i=0; i<a.length(); i++)
a.clear();
}
return 0;
}