HOJ 2601 - GPA(字符串)

下午来两道字符串练练手。
传送门:http://acm.hit.edu.cn/hojx/showproblem/2601/
2601 - GPA

Time limit : 1 s Memory limit : 64 mb
Submitted : 1111 Accepted : 446
Submit

Problem Description

Each course grade is one of the following five letters: A, B, C, D,
and F. (Note that there is no grade E.) The grade A indicates superior
achievement, whereas F stands for failure. In order to calculate the
GPA, the letter grades A, B, C, D, and F are assigned the following
grade points, respectively: 4, 3, 2, 1, and 0.

Input

The input file will contain data for one or more test cases, one test
case per line. On each line there will be one or more upper case
letters, separated by blank spaces.

Output

Each line of input will result in exactly one line of output. If all
upper case letters on a particular line of input came from the set {A,
B, C, D, F} then the output will consist of the GPA, displayed with a
precision of two decimal places. Otherwise, the message “Unknown
letter grade in input” will be printed.

Sample Input

A B C D F
B F F C C A
D C E F

Sample Output

2.00
1.83
Unknown letter grade in input

比之前杭电那道GPA简单些,不过我读了两遍题后都没发现它明确说GPA怎么算的,后面看样例发现是算平均数。
注意一下出现不合法的字符后,要一直getchar()到换行就可以了。
AC代码如下:

#include 
#include 
int main()
{
    char c;
    while(1)
    {
        int num = 0, sum = 0;
        double gpa = 0;

        int flag = 1;
        while((c = getchar()) != '\n')
        {
            switch(c)
            {
                case ' ':
                    break;
                case EOF:
                    return 0;
                case 'A':
                    num++;
                    sum += 4;
                    break;
                case 'B':
                    num++;
                    sum += 3;
                    break;
                case 'C':
                    num++;
                    sum += 2;
                    break;
                case 'D':
                    num++;
                    sum += 1;
                    break;
                case 'F':
                    num++;
                    break;
                default:
                    flag = 0;
                    break;
            }
            if(!flag)   break;
        }
        if(flag)
        {
            gpa = sum * 1.0 / num;
            printf("%.2f\n", gpa);
        }
        else
        {
            while((c = getchar()) != '\n');
            printf("Unknown letter grade in input\n");
        }
    }
    return 0;
}

你可能感兴趣的:(ACM练习)