结丘女子高等学校刚刚进行了月考,身为学生会长的叶月恋和她的伙伴们刚刚顺利通过了 lovelive 的地区选拔,正在努力练习唱歌跳舞,准备东京地区赛,于是她把统计成绩的任务交给了你。
输入格式
输入包含若干行,每组一行一个整数。
当输入的整数在 0到 100 之间的非负整数时,代表一位同学的成绩。第 i 个合法输入的是序号为 i 的同学的成绩。
当输入 −1 时代表输入停止。
当输入其他不在 −1 到 100 之间的整数时,代表无效数据,不算做同学的分数(即不增加同学数量,不占据序号),继续输入下一组。
输出格式
请输出五行,分别为学生总数,平均分(四位小数),最高分序号及分数,最低分序号及分数,分数的众数。
当获得最高分/最低分的同学有多个时,输出最大的序号。
当众数有多个时,输出最大的众数。
count: x
ave: x.xxxx
max: i: x
min: i: x
mode: x
样例输入
86
35
60
-5
55
100
104
-7
35
55
86
-1
样例输出
count: 8
ave: 64.0000
max: 5: 100
min: 6: 35
mode: 86
数据范围
结丘女子高等学校只有不超过 300 名学生,也不会一个学生也没有。
HINT
至于众数怎么算,可以开一个 score[101] 数组,score[i] 代表分数 i 出现的次数。
↑ 上面的 score[101]叫做哈希表,可以通过数组的下标,直接索引到该分数的出现次数。
哈希表在写程序中非常好用,最基础的哈希表就是将数组下标当作索引。
例如多组数据输入一个年级所有同学的生日,想要统计在每天过生日的同学有几名,可以开一个数组birthday[1235],其中birthday[1016]储存在十月十六日过生日的同学的人数,birthday[131]储存在一月三十一过生日的同学的人数,这是一种哈希表。
如果想要统计学号为18375030到18375168之间的同学的成绩,可以开一个数组a[200],其中a[76]便储存着学号为18375076的同学的成绩。便是建立了一个数组下标 = 学号 - 18375000的映射,提高程序性能,是一种优化过的哈希表。
之前E2出过一个《水水的跳格子》便用了哈希表的思想,每一个格子都有一个数字或者字母作为标记,如果被同一个字符标记的两个格子相距三格以上,跳不过去,游戏便输。
我们便开一个hash[130]数组,hash[65]中的数字便是ascii码为65的字符上一次出现的位置。如果我们遍历到第 i 个格子,这个格子上的字符是str [i],如果此时发现i-hash[ str[i] ] > 3,就输出游戏失败,如果i-hash[ str[i] ] <= 3,就把hash[ str[i] ]更新为 i ,继续探索下一格。
将生日 / 学号 / 字符的ascii码等我们需要的信息,通过一定函数(如f(x)=x−18375000),映射到数组下标而形成的数组,便是哈希表。我们通过下标读取数组元素,就可以得到想要读取的信息,十分便捷,希望给大家留下些许印象