解题思路:
字符加偏移量。
注意优质题解里用switch语句来做是很直观明了的,这里我就不多说了。我要说的是提供一种新的思路来解这题。
在这种等级判断中,主要依靠十位以上的数字来判断等级,而与个位数无关,即:
表1:
| 分数段 | 等级 |
| 10*(100) | A |
| 9*(90~99) | A |
| 8*(80~89) | B |
| 7*(70~79) | C |
| 6*(60~69) | D |
| 5*(50~59) | E |
| 4*(40~49) | E |
| 3*(30~39) | E |
| 2*(20~29) | E |
| 1*(10~19) | E |
| 0 | E |
则可以用整型数除于10来得到我们想要的数字。也就是把个位数屏蔽掉。
其次再定义一个字符变量并为它赋值为A(char grade='A'),通过加上相应的步长(即偏移量)来得到相应等级的输出。(字符加一个数字,其实是拿字符的ASCII值来加这个数值的)
表2:
| grade+0 | A |
| grade+1 | B |
| grade+2 | C |
| grade+3 | D |
| grade+4 | E |
| grade+5 | F |
| grade+6 | G |
| grade+7 | H |
| grade+8 | I |
| grade+9 | J |
| grade+10 | K |
为此我们注意到100分的情况和50分及以下的情况都为特殊的情况,而其他情况的步长与十位上的数字之和都为9,比如表2的等级B所对应的步长为1,而表1的等级B所对应的数为8;同理也可看出:表2的等级C所对应的步长为2,而表1的等级C所对应的数为7。
这样我们就可以通过9-十位上的数字来得出步长,在考虑特殊情况,100分的时候令步长=0,50分以下(不用包含50)的时候令步长=4。
注意事项:
参考代码:
#include"stdio.h"
void main()
{
int num;
char grade='A';
scanf("%d",&num);
num/=10; //屏蔽个位上的数字
num=9-num;
if(num==-1)//100分时的情况,因为9-10=-1
num=0;
if(num>4)//50分以下的情况
num=4;
printf("%c\n",grade+num);//加步长,字符输出
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复