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 <stdio.h>
#include <string.h>
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值