【杭电OJ】Problem-2004 成绩转换题析坑点

前言

题目链接:Problem-2004 成绩转换

注:因为本题其实并不难,主要是通过本题来分析我们遇到一个问题后的处理方法,找寻边界条件等

题目描述

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 168123 Accepted Submission(s): 73465

Problem Description

输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;

Input

输入数据有多组,每组占一行,由一个整数组成。

Output

对于每组输入数据,输出一行。如果输入数据不在0~100范围内,请输出一行:“Score is error!”。

Sample Input

56
67
100
123

Sample Output

E
D
A
Score is error!

题解分析

很显然,就是简单的一个对应输出

ok,这种情况我们想到的第一个念头就是swtich-case

代码附上

#include <iostream>
using namespace std;
int main(){
    int a;
    while(cin>>a){
        string res;
        switch(a/10){
            case 9: res = "A";break;
            case 8: res = "B";break;
            case 7: res = "C";break;
            case 6: res = "D";break;
            case 5: 
            case 4:
            case 3:
            case 2:
            case 1:
            case 0: res = "E";break;
            default : res = "Score is error!"; break;
        }
        cout<<res<<endl;
    }
    return 0;
}

submit,

and Wrong Answer

哟西,这一波就有点sao了,讲道理,我们也考虑到了100分的这种情况,同时也考虑到了“Score is error!”的情况,那是什么原因呢?

好吧,那我们来试一波为else if的题解

#include <iostream>
using namespace std;
int main(){
    int a;
    while(cin>>a){
        if(a>=90 && a<=100){
            cout<<'A'<<endl;
        } else if(a >=80 && a<90){
            cout<<'B'<<endl;
        } else if(a>=70 && a<80){
            cout<<'C'<<endl;
        } else if(a>=60 && a<70){
            cout<<'D'<<endl;
        } else if(a>=0 && a<60){
            cout<<'E'<<endl;
        } else{
            cout<<"Score is error!"<<endl;
        }
    }
    return 0;
}

sumit

and ,Accepted.

这一波又为什么能够AC呢,

坑点分析

我们仔细分析一下:其实我们的思路肯定是没有问题的,那肯定是关于边界细节或者资源的问题

因为博主很久没有刷题的原因,对于Switch的消耗资源不是很清楚了,我搜了下资料,暂且不说Switch对于资源消耗其实很低很低,就问题本身而言,这个输入规模相当的小,再加上OJ并没有报资源耗尽的信息,

我们排除关于资源消耗尽的原因

那么,我们应该是有一些边界条件没有考虑到。

经过了多个数据的测试,发现,

原来我们忘记考虑100和110之间的数了,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值