#2
sdta2024-12-03 19:50
|
只有本站会员才能查看附件,请 登录
工作需要均衡分配学生,近日浏览查询发现论坛前期wengjl曾发过同样的帖子,一是我个人水平有限没完全读懂高手的语句,二是没完全解决问题
这里我借鉴wengjl数据表,修改了一下人数(致谢)
报名库(bmk)中共3200人,按计划库(zkjhk)中字段zsrs人数要求分别录取到一中(招690人)、二中(招850人)、三中(招1000人)、四中(招660人),分派时,只考虑中考成绩的均衡即可(性别及毕业学校等不用考虑)
请教
1.Tiger5392版的程序结果有时人数不完全相同,如何解决,能否注解一下
2.wengjl版用平均分(pjf)来衡量均衡性,请教还有更好的方式吗
Tiger5392版语句如下
程序代码:
CLOSE ALL
USE zkjhk
COPY TO ARRAY laArr FIELDS zsrs
USE bmk.DBF
RAND(SECONDS())
STORE 0 TO lnCnt1,lnCnt2,lnCnt3,lnCnt4
SCAN
lnRound=RAND()
DO CASE
CASE lnRound<=laArr(1)/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt1<laArr(1)
lcSchool='0100'
lnCnt1=lnCnt1+1
CASE lnRound<=(laArr(1)+laArr(2))/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt2<laArr(2)
lcSchool='0200'
lnCnt2=lnCnt2+1
CASE lnRound<=(laArr(1)+laArr(2)+laArr(3))/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt3<laArr(3)
lcSchool='0300'
lnCnt3=lnCnt3+1
OTHERWISE
lcSchool='0400'
lnCnt4=lnCnt4+1
ENDCASE
REPLACE lqxxdm WITH lcSchool
ENDSCAN
SELECT lqxxdm,COUNT(*) lqrs,AVG(tot) pjf FROM bmk GROUP BY lqxxdm
USE zkjhk
COPY TO ARRAY laArr FIELDS zsrs
USE bmk.DBF
RAND(SECONDS())
STORE 0 TO lnCnt1,lnCnt2,lnCnt3,lnCnt4
SCAN
lnRound=RAND()
DO CASE
CASE lnRound<=laArr(1)/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt1<laArr(1)
lcSchool='0100'
lnCnt1=lnCnt1+1
CASE lnRound<=(laArr(1)+laArr(2))/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt2<laArr(2)
lcSchool='0200'
lnCnt2=lnCnt2+1
CASE lnRound<=(laArr(1)+laArr(2)+laArr(3))/(laArr(1)+laArr(2)+laArr(3)+laArr(4)) AND lnCnt3<laArr(3)
lcSchool='0300'
lnCnt3=lnCnt3+1
OTHERWISE
lcSchool='0400'
lnCnt4=lnCnt4+1
ENDCASE
REPLACE lqxxdm WITH lcSchool
ENDSCAN
SELECT lqxxdm,COUNT(*) lqrs,AVG(tot) pjf FROM bmk GROUP BY lqxxdm