主题:急需求助随机分配程序
cqx721103
[专家分:0] 发布于 2009-09-22 17:28:00
各位高手,我是四川灾区一名工作人员,参与分房工作,想把房源随机的分配给分房户,VF我略懂一点,请大家帮我编个程序,谢谢了,房源与分房户基础表在上传文件中,先代表灾区人民谢谢了!
最后更新于:2009-09-22 17:37:00
回复列表 (共7个回复)
沙发
Gleam [专家分:3100] 发布于 2009-09-26 17:00:00
看到你的帖子,这两天在考虑了个比较简洁的方案:
思路:先将名单和房源一一对应,然后根据随机数,将房源对调。
做一个表test,字段nrecno,nno。nrecno表示名单号,nno表示房源。
LOCAL i , nfirno, nsecno, ngetrand
*i 计数器, nfirno 当前房源, nsecno 随机房源, ngetrand 随机数
SELECT (thisform.dataenvironment.cursor1.alias)& 这里我用的是表单,如果你用程序,改成select test
GO top
=RAND(-1)
FOR i = 1 TO 1000
&选择循环的当前纪录,并获得当前纪录的房源号
GO i
nfirno = test.nno
ngetrand = INT( RAND() * 1000)
IF ngetrand = 0
ngetrand = 1000
ENDIF
&选择随机数的纪录,并获得随机纪录的房源号
GO ngetrand
nsecno = test.nno
&两套房源互相对换
replace test.nno WITH nfirno for test.crecno = ngetrand
replace test.nno WITH nsecno for test.crecno = i
ENDFOR
我测试了一下,随即后只有两三套房左右的编号和需求者的编号相同。应该是全部随即了。
不知道是否满足你的条件。如需改动,请发帖。
板凳
cqx721103 [专家分:0] 发布于 2009-09-28 09:45:00
GLEAM老师,我试了一下,想在表单加两个控件,一个是启动分房的按钮,一个是一个文本框,文本框能显示出房源随机变化的界面,谢谢了!谢谢了!
3 楼
Gleam [专家分:3100] 发布于 2009-09-28 17:32:00
[quote]GLEAM老师,我试了一下,想在表单加两个控件,一个是启动分房的按钮,一个是一个文本框,文本框能显示出房源随机变化的界面,谢谢了!谢谢了![/quote]
1、在表单加入启动分房的按钮,可以将我上面的代码放进启动按钮即可。
2、文本框能显示出房源随机变化的界面,这个你需要再详细的描述一下。因为随机分配的代码执行很快,如果要显示,信息太多了。我不知道你想怎么显示。
如果方便,把你的QQ发信息给我,再详细描述一下。
4 楼
cqx721103 [专家分:0] 发布于 2009-09-28 17:36:00
好的,谢谢了我明天试一下,在与你联系!
5 楼
cqx721103 [专家分:0] 发布于 2009-09-29 09:51:00
老师,我在按钮中加入代码后在运行后出现了错误,显示不能识别的成员cursor1,不知什么原因。我的QQ290850037怎样与你联系?谢谢了
6 楼
Ilikefox [专家分:5770] 发布于 2009-09-29 11:09:00
俺给个程序:
USE "分房户基础表.dbf" ALIAS FFH IN 0
USE "房源.dbf" ALIAS FY IN 0
SELECT *, .F. as Sel FROM FY INTO CURSOR tempFY READWRITE
=RAND(-1)
FOR nI=1 TO 1000
GO nI IN FFH
DO WHILE .T.
nRec=INT(1000*RAND()+1)
GO nRec IN tempFY
IF NOT tempFY.Sel
replace FFH.房间中文号 WITH tempFY.房间中文号
replace tempFY.Sel WITH .T.
EXIT
ENDIF
ENDDO
ENDFOR
7 楼
Gleam [专家分:3100] 发布于 2009-09-29 15:27:00
6楼赵老师的方案我也考虑过。但是这样的话,前面随机还好说,到后面,很难随机到没有分配的房源。因为随着房源的分配,随机的概率都递增0.1%。如:分配了900户以后,下次取合法的随机数的概率只有10%。当分配到990户时,合法的随机数概率只有1%。时间太长了。
不过,按照赵老师的程序,可以显示随机分配房源的信息。
我的方案类似于数组的冒泡法,虽然程序运行的时间会缩短很多,但是所有房源始终是处在随机分配的状态,的确不便于显示分配信息。
我来回复