赞
踩
题目链接: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之间的数了,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。