首页 新闻 会员 周边

如何实现按照平均分和男女生比例进行平均学校分班

0
悬赏园豆:200 [已关闭问题] 关闭于 2014-06-11 09:44

如题,我想用c#写个页面,实现将学生按照平均分和男女生比例平均分成4个班。数据现在已经在SQL中有了,想求位大牛帮忙写个分班的算法实现。只要能实现 每个班男女生比例相等,每个班级成绩误差不超过2就行。谢谢啦。我这边工作需要,但是能力有限,写不出来了。

running walker的主页 running walker | 初学一级 | 园豆:7
提问于:2014-05-05 10:36
< >
分享
所有回答(3)
0

帮顶 在想

开山怪不怪 | 园豆:544 (小虾三级) | 2014-05-05 11:03
0

...蛋疼,男生总数/女生总数=男女总比例.学生总数/班级数=每班人数

每班男生=每班人数*男女总比例.女生同理.

你是要问SQL怎么写?

吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-05 11:10
0

所有男生排序,所有女生排序,从最低分开始,将男女依次分布到四个班(和1、2报数分组一个道理),

这时基本保证了男女比例接近,平均分也接近,然后计算此时每班平均分,如果班级平均成绩误差超过2,则从平均成绩最高的班向成绩最低的班交互学生,高分换低分,男生换男生,女生换女生。然后重新算,重新比较重新交换,直到平均分符合标准。

如何选择要交换的学生:Pnum*(Pmax-Pmin)/2即要交互的两个学生成绩差,从两个班里选最接近该成绩差的两个学生交换。

当然,如果为了保证随机性,可选Pnum*((Pmax-Pmin)/2-1)到Pnum*((Pmax-Pmin)/2+1)范围内的学生随机交互。

 

hailants | 园豆:750 (小虾三级) | 2014-05-05 16:38

我也说一个思路,男女人数确定,总人数确定,总分确定,各班平均分就确定,各班男女数也确定,男女都平均分成四组,男生按从低到高分数分组,女生按从高到低分数分组,再计算第一组男第一组女(相当于一个班级了)平均分。比较此平均分与确定的平均分(上下范围2),高于确定平均分,就换女生(女生组分值从高到低排列),从女生第二组依次换,再计算比较平均分,低于平均分,就换男生(男生组分值从低到高排列),再计算比较平均分。一个班一个班确定。

只是一个思路,没有实施,但是觉着最后范围应该在4了,也不知能行不能行

支持(0) 反对(0) 开山怪不怪 | 园豆:544 (小虾三级) | 2014-05-07 09:47

有点看不懂,Pnum是什么?Pmax和Pmix又是什么?存放男女生用什么数据结构比较好?

能不能写个简单的实现过程为看下。我现在思路基本没有

 

支持(0) 反对(0) running walker | 园豆:7 (初学一级) | 2014-05-08 11:53

@running walker: 忘了说明了,Pnum是每班学生数,Pmax是平均分最高的班的平均分,Pmin是平均分最低的班的平均分

男女生不需要复杂的数据结构,

学生结构体:{学生名,分数}

班级结构体:{班级号,男生数组,女生数组,平均分}

创建四个班级的结构体,男生数组长度=男生总数/4,女生数组长度计算同男生

所有男生数组排序,然后从第一个开始取,依次存到四个班级结构体的男生数组中(男1->班1,男2->班2。。。)

女生操作同男生。

各班级结构体计算班级平均分

班级结构体数组排序,比较最高分和最低分,大于2的话,最高分班级中取出最高分男生,交换到最低分班级的最低分男生,(交换的时候按成绩排序插入,避免数组乱序,容易操作)

继续重复以上两步, 直到平均分符合条件,如果历经男生总数/4次交换仍不符合条件,就开始交换女生

支持(0) 反对(0) hailants | 园豆:750 (小虾三级) | 2014-05-08 15:47

@黑峰: 没必要围着总分/总人数=总平均分来操作,排序、报数分组、各算平均分,最高最低之间调剂一下,反正要保证的是各班平均分一致,而且经排序报数分组后,各组平均分实际上是围绕总平均分上下分布的没必要单独计算比较。

支持(0) 反对(0) hailants | 园豆:750 (小虾三级) | 2014-05-08 15:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册