解题思路:

字符加偏移量。

        注意优质题解里用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
0E


    则可以用整型数除于10来得到我们想要的数字。也就是把个位数屏蔽掉。

    其次再定义一个字符变量并为它赋值为A(char grade='A'),通过加上相应的步长(即偏移量)来得到相应等级的输出。(字符加一个数字,其实是拿字符的ASCII值来加这个数值的)

表2:

grade+0A
grade+1B
grade+2C
grade+3D
grade+4E
grade+5F
grade+6G
grade+7H
grade+8I
grade+9J
grade+10K

        为此我们注意到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);//加步长,字符输出
}

点赞(5)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论