您的位置:首页 > 其它

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

2018-03-17 11:15 423 查看

前言

题目链接: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:
4000
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之间的数了,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDU-OJ