解题思路:
字符加偏移量。
注意优质题解里用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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复