HDU - 4802 GPA

2015-01-27 22:36:20 · 作者: · 浏览: 111

Description

In college, a student may take several courses. for each course i, he earns a certain credit (c i), and a mark ranging from A to F, which is comparable to a score (s i), according to the following conversion table
\

The GPA is the weighted average score of all courses one student may take, if we treat the credit as the weight. In other words,
\

An additional treatment is taken for special cases. Some courses are based on “Pass/Not pass” policy, where stude nts earn a mark “P” for “Pass” and a mark “N” for “Not pass”. Such courses are not supposed to be considered in computation. These special courses must be ignored for computing the correct GPA.
Specially, if a student’s credit in GPA computation is 0, his/her GPA will be “0.00”.

Input

There are several test cases, please process till EOF.
Each test case starts with a line containing one integer N (1 <= N <= 1000), the number of courses. Then follows N lines, each consisting the credit and the mark of one course. Credit is a positive integer and less than 10.

Output

For each test case, print the GPA (rounded to two decimal places) as the answer.

Sample Input

 5
2 B
3 D-
2 P
1 F
3 A
2
2 P
2 N
6
4 A
3 A
3 A
4 A
3 A
3 A 

Sample Output

 2.33
0.00
4.00 
题意:比较水的题目

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
       using namespace std; map
       
         mp; int n; int main() { int m; string str; mp["A"] = 4.0, mp["A-"] = 3.7, mp["B+"] = 3.3; mp["B"] = 3.0, mp["B-"] = 2.7, mp["C+"] = 2.3; mp["C"] = 2.0, mp["C-"] = 1.7, mp["D"] = 1.3; mp["D-"] = 1.0, mp["F"] = 0.0; while (scanf("%d", &n) != EOF) { double ans = 0.00; int sum = 0; for (int i = 0; i < n; i++) { cin >> m >> str; if (str == "P" || str == "N") continue; sum += m; ans += (double) m * mp[str]; } if (sum == 0) printf("0.00\n"); else printf("%.2f\n", 1.0*ans/sum); } return 0; }