各位博友好,我现在正在开发一个分班系统,在求平均分时遇到一个问题;
我建了一个学生类StudentDetail,里面包含两个属性:序号和成绩;将学生按顺序随机分配到5个班里;存储结构是这样设计的List<List<StudentDetail>>。
我总共录入125个学生,平均为172分
当学生都随机分完后,我求出来每个班的平均分是:
1班的学生数为:25----平均分为:172;
2班的学生数为:25----平均分为:172;
3班的学生数为:25----平均分为:170;
4班的学生数为:25----平均分为:169;
5班的学生数为:25----平均分为:176;
现在想将每个班的平均分都变为172分,怎么写个循环程序来实现我的想法;
你是不会算法,还是不会写代码?
我是有思路,但是不知道怎么写。我将每个班的平均分放到一个数组里,则有5个平均分。int[] avg={172,172,170,169,176};我将每个班平均分与总平均分进行比较:
如果该班级平均分-总平均分的绝对值<0.5,不用进行调整,继续循环下面元素;
如果该班级平均分大于(总平均分+0.5),查找平均分数组后面的元素,找到比它小的班级平均分。
* 如果存在,从(平均分所在索引-1)与该班级(平均分所在索引+1)学生进行互换,当该班平均分-总平均分小于绝对值0.5,不用进行互换,进行下一步循环
* PS-当所换班级平均分-总平均分小于绝对值0.5,不再与该班级进行互换,查找平均分数组后面的元素,找到比他小的班级平均分,再次进行互换。
* 如果不存在,则说明该班为最后一个未调整好的班级,不用进行调整,跳出循环;
如果该班级平均分小于(总平均分-0.5),查找平均分数组后面的元素,找到比它大的班级平均分。
* 如果存在,从(平均分所在索引+1)与该班级(平均分所在索引-1)学生进行互换,当该班平均分-总平均分小于绝对值0.5,不用进行互换,进行下一步循环
* PS-当所换班级平均分-总平均分小于绝对值0.5,不与该班级进行互换,查找平均分数组后面的元素,找到比他大的班级平均分,再次进行互换。
* 如果不存在,则说明该班为最后一个未调整好的班级,不用进行调整,跳出循环
我的目的就是想让所有班的平均分相差最大为1 。我是这么想的,但是写起来我就不太会了
@running walker: 你的意思是你不会写代码?
@飞翔的球迷: 组合算法:http://blog.sina.com.cn/s/blog_5ec65abd0100dw9h.html
首先,我想说,并不是总分是172分,就能保证每个班的平均分都是172分的。