飞羽


私信TA

用户名:cjun1998

访问量:15073

签 名:

coding

等  级
排  名 449
经  验 4804
参赛次数 6
文章发表 17
年  龄 0
在职情况 在职
学  校
专  业

  自我简介:

十八般武艺,样样不会

解题思路:

字符加偏移量。

        注意优质题解里用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);//加步长,字符输出
}

 

0.0分

2 人评分

  评论区

  • «
  • »