首页 新闻 会员 周边 捐助

分班遇到的问题,list中元素如何互换

0
[已解决问题] 解决于 2014-07-09 09:34

各位博友好,我现在正在开发一个分班系统,在求平均分时遇到一个问题;

我建了一个学生类StudentDetail,里面包含两个属性:序号和成绩;将学生按顺序随机分配到5个班里;存储结构是这样设计的List<List<StudentDetail>>。

我总共录入125个学生,平均为172分

当学生都随机分完后,我求出来每个班的平均分是:

1班的学生数为:25----平均分为:172;

2班的学生数为:25----平均分为:172;

3班的学生数为:25----平均分为:170;

4班的学生数为:25----平均分为:169;

5班的学生数为:25----平均分为:176;

现在想将每个班的平均分都变为172分,怎么写个循环程序来实现我的想法;

running walker的主页 running walker | 初学一级 | 园豆:7
提问于:2014-07-07 16:46
< >
分享
最佳答案
0

你是不会算法,还是不会写代码?

奖励园豆:5
Launcher | 高人七级 |园豆:45050 | 2014-07-07 16:54

我是有思路,但是不知道怎么写。我将每个班的平均分放到一个数组里,则有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 | 园豆:7 (初学一级) | 2014-07-08 14:37

@running walker: 你的意思是你不会写代码?

Launcher | 园豆:45050 (高人七级) | 2014-07-08 14:46

@飞翔的球迷: 组合算法:http://blog.sina.com.cn/s/blog_5ec65abd0100dw9h.html

Launcher | 园豆:45050 (高人七级) | 2014-07-08 15:30
其他回答(1)
0

首先,我想说,并不是总分是172分,就能保证每个班的平均分都是172分的。

angelshelter | 园豆:9914 (大侠五级) | 2014-07-07 16:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册