回 帖 发 新 帖 刷新版面

主题:急需求助随机分配程序

各位高手,我是四川灾区一名工作人员,参与分房工作,想把房源随机的分配给分房户,VF我略懂一点,请大家帮我编个程序,谢谢了,房源与分房户基础表在上传文件中,先代表灾区人民谢谢了!

回复列表 (共7个回复)

沙发

看到你的帖子,这两天在考虑了个比较简洁的方案:
思路:先将名单和房源一一对应,然后根据随机数,将房源对调。

做一个表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
我测试了一下,随即后只有两三套房左右的编号和需求者的编号相同。应该是全部随即了。
不知道是否满足你的条件。如需改动,请发帖。

板凳

GLEAM老师,我试了一下,想在表单加两个控件,一个是启动分房的按钮,一个是一个文本框,文本框能显示出房源随机变化的界面,谢谢了!谢谢了!

3 楼

[quote]GLEAM老师,我试了一下,想在表单加两个控件,一个是启动分房的按钮,一个是一个文本框,文本框能显示出房源随机变化的界面,谢谢了!谢谢了![/quote]
1、在表单加入启动分房的按钮,可以将我上面的代码放进启动按钮即可。
2、文本框能显示出房源随机变化的界面,这个你需要再详细的描述一下。因为随机分配的代码执行很快,如果要显示,信息太多了。我不知道你想怎么显示。
如果方便,把你的QQ发信息给我,再详细描述一下。

4 楼

好的,谢谢了我明天试一下,在与你联系!

5 楼


老师,我在按钮中加入代码后在运行后出现了错误,显示不能识别的成员cursor1,不知什么原因。我的QQ290850037怎样与你联系?谢谢了

6 楼

俺给个程序:

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 楼

6楼赵老师的方案我也考虑过。但是这样的话,前面随机还好说,到后面,很难随机到没有分配的房源。因为随着房源的分配,随机的概率都递增0.1%。如:分配了900户以后,下次取合法的随机数的概率只有10%。当分配到990户时,合法的随机数概率只有1%。时间太长了。
不过,按照赵老师的程序,可以显示随机分配房源的信息。
我的方案类似于数组的冒泡法,虽然程序运行的时间会缩短很多,但是所有房源始终是处在随机分配的状态,的确不便于显示分配信息。

我来回复

您尚未登录,请登录后再回复。点此登录或注册