【杭电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之间的数了,