这道题逻辑的实现上其实坑不多,主要分为三部分。
- 声明一个结构数组保存每个学生的成绩,写一个循环录入数据
- 依照晴神的实现还需要一个记录排名的二维数组
rank[1000000][4]
,并写一个循环分四次将A,C,M,E
的排名计算并放入rank[][]
中,主要复杂度在这一部分,其实也就O(n)
的级别。 - 根据给出的
query ID
来分别给出各个学生的排名和对应科目字符。
代码就没必要列出来了,主要是有这么一个小坑,我卡了很久。
我自己按照自己的思路写了一遍后,提交后一直出现段错误,和晴神笔记里的代码仔细对比也没发现什么错误。后来我才发现,之所以会发生段错误——栈溢出,是因为我将上面的rank[1000000][4]
这个数组声明在了main
函数里头。
这里要说一下,main
函数中的局部变量是存放在系统栈里头,而全局变量是定义在静态存储区,允许申请的空间较大,所以一般像数组元素超过
1
0
6
10^6
106的数组就不应该放在main
里头,否则会发生段错误的情况,当我将rank[][]
定义在了main
之外就顺利通过了。