帮顶 在想
...蛋疼,男生总数/女生总数=男女总比例.学生总数/班级数=每班人数
每班男生=每班人数*男女总比例.女生同理.
你是要问SQL怎么写?
所有男生排序,所有女生排序,从最低分开始,将男女依次分布到四个班(和1、2报数分组一个道理),
这时基本保证了男女比例接近,平均分也接近,然后计算此时每班平均分,如果班级平均成绩误差超过2,则从平均成绩最高的班向成绩最低的班交互学生,高分换低分,男生换男生,女生换女生。然后重新算,重新比较重新交换,直到平均分符合标准。
如何选择要交换的学生:Pnum*(Pmax-Pmin)/2即要交互的两个学生成绩差,从两个班里选最接近该成绩差的两个学生交换。
当然,如果为了保证随机性,可选Pnum*((Pmax-Pmin)/2-1)到Pnum*((Pmax-Pmin)/2+1)范围内的学生随机交互。
我也说一个思路,男女人数确定,总人数确定,总分确定,各班平均分就确定,各班男女数也确定,男女都平均分成四组,男生按从低到高分数分组,女生按从高到低分数分组,再计算第一组男第一组女(相当于一个班级了)平均分。比较此平均分与确定的平均分(上下范围2),高于确定平均分,就换女生(女生组分值从高到低排列),从女生第二组依次换,再计算比较平均分,低于平均分,就换男生(男生组分值从低到高排列),再计算比较平均分。一个班一个班确定。
只是一个思路,没有实施,但是觉着最后范围应该在4了,也不知能行不能行
有点看不懂,Pnum是什么?Pmax和Pmix又是什么?存放男女生用什么数据结构比较好?
能不能写个简单的实现过程为看下。我现在思路基本没有
@running walker: 忘了说明了,Pnum是每班学生数,Pmax是平均分最高的班的平均分,Pmin是平均分最低的班的平均分
男女生不需要复杂的数据结构,
学生结构体:{学生名,分数}
班级结构体:{班级号,男生数组,女生数组,平均分}
创建四个班级的结构体,男生数组长度=男生总数/4,女生数组长度计算同男生
所有男生数组排序,然后从第一个开始取,依次存到四个班级结构体的男生数组中(男1->班1,男2->班2。。。)
女生操作同男生。
各班级结构体计算班级平均分
班级结构体数组排序,比较最高分和最低分,大于2的话,最高分班级中取出最高分男生,交换到最低分班级的最低分男生,(交换的时候按成绩排序插入,避免数组乱序,容易操作)
继续重复以上两步, 直到平均分符合条件,如果历经男生总数/4次交换仍不符合条件,就开始交换女生
@黑峰: 没必要围着总分/总人数=总平均分来操作,排序、报数分组、各算平均分,最高最低之间调剂一下,反正要保证的是各班平均分一致,而且经排序报数分组后,各组平均分实际上是围绕总平均分上下分布的没必要单独计算比较。