C#统计出各班的每个学生的总成绩,并打印出每班的前三名成绩

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#统计出各班的每个学生的总成绩,并打印出每班的前三名成绩相关的知识,希望对你有一定的参考价值。

不求代码,只求算法,我现在只能统计出每个班所有学生的总成绩,但是不知道怎么只打印出前三名,假设每个班有10个人
数据是从txt文档里面一行行读取的,比如这样:
1011234567广岛中学11100001赵一100100100100099
最后一串数字以每3个为一组,分别代表了5科成绩

你学生和学生的总成绩,用Dictionary<学号,成绩>,应该是Dictionary<string,int>来保存,
new 一个变量,Dictionary<string,int> totalScoreDic=new Dictionary<string,int>();
然后循环遍历所有学生,每次循环中又循环该生的所有成绩,并totalScoreDic[学号]+=该生成绩,循环完就得到每个学生总成绩了。
至于前三名只要对totalScoreDic遍历3次就好了,每次取出最大的那个,取出后将该个从totalScoreDic删掉。
参考技术A 1.不知道你文件格式,如果是cvs文件,直接用ado.net 读成datatable,剩下的东西估计你自己一会做
2.如果文件不是cvs,用stream流,readline一行一行读,同时把最后组每3位一截,截成5科的单独成绩
3.算法部分,如果要求只打印出每班前三名,则不必做全排序。按班级Dictionary做堆排序就ok了

堆排资料:http://baike.baidu.com/view/157305.htm
参考技术B 你把所有人成绩放到数组里,然后直接用Array.Sort排序(默认是升序排序),然后从数组最后一个元素起逆向输出三个就行了,那就是前三名。(当然象这种读取文件的话,Array可能不太适合,可以考虑用Dictionary或者两个List,这两个排序资料也不少了,自己查查看) 参考技术C 从txt文件中读出数据时,就应该得到他们的总成绩,然后再保存到Array中,然后用他内部了的排序方法得到最后 的结果哦! 参考技术D select top 3 * from (你的统计查询) ; 第5个回答  2012-05-17 可以放在数组里,然后通过冒泡排序进行排序,然后取数组下标的前三位。。

以上是关于C#统计出各班的每个学生的总成绩,并打印出每班的前三名成绩的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL中按班级提取前各科的前三名、后三名的成绩及姓名?

JAVA排序的问题

java基础 求3个班5个同学成绩

C语言(学生成绩管理系统)

SQL问题:各班前三名的学号

05transformation操作开发实战