前言
算法编程最注重思维,而编程思维在本质上甚至接近数学。但算法最核心的部分一定是为了解决一个实际问题,这个问题是一定可以用算法进行解决的。对于大多数入门的人来说,刷题时确实都会按照题目给的要求来设计算法,但是在这一过程中,往往不会想要去寻求一个最优解。
在数学题中有通解与优解,编程题其实也一样。那么这篇文章记载的就是一些入门级别题目的优解及思维过程,其中还会适时包括编程语言的基础语法,希望阅读它可以使你在刚刚入门编程这一领域时,就能够自主深化编程思维,提高算法设计水平。
问题 Z: 五级成绩区间
题目描述
输入五级成绩(A~E),输出相应的百分制成绩区间(0~100),要求使用多路选择语句。五级制成绩对应的百分制成绩区间为:A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59)。
输入
B
输出
80-89
样例输入
E
样例输出
0-59
如果用常规思路,不难想到可以使用switch分支语句来解决问题,不过,如果了解了char类型与int类型之间的关系,完全可以用一个二维字节数组来完成任务
先直接上代码
#include <iostream>
using namespace std;
int main()
{
const char*range[5] = {"90-100","80-89","70-79","60-69","0-59"};
char level = 0;
int n = 0;
cin >> level;
n = level - 'A';
cout << range[n] << endl;
return 0;
}
基础知识
char类型其实就是占用一个1字节的整数型,范围是-128~127
而如果向char中存入字母,比如将A存入char中,那么char的int数值表示其实就是A的ASCII编码,也就是65
思维过程
在输入明确表明被限制在了ABCDE的情况下,我们不妨建立一个{ABCDE}到{"90-100","80-89","70-79","60-69","0-59"}的映射,提到映射想必很熟悉了吧,没错高中必修一就学的知识,那么如何将ABCDE转换为char数组的下标呢?上面讲了char类型的int数值表示,所以可以直接将输入进来的字母减去'A'
(想想为什么用单引号),这样我们就得到了{ABCDE}到{01234}的映射,这不就是char数组的下标嘛,问题到此结束,没有使用任何一个分支语句!
未完待续→