回 帖 发 新 帖 刷新版面

主题:[讨论]求救!随机生成100位0、1的随机数

生成100位0、1的随机数,例如100101011001010……并在生成的过程中,与text中的内容进行匹配

sjs=RAND()
do case
   case sjs<0.5
    a=0
  otherwise
     a=1
endcase

就是现在没有办法把所生成的0和1连接起来









求高手指点,或加小女QQ,450939941

回复列表 (共17个回复)

沙发

请参考:[email]http://bbs.pfan.cn/post-317599.html[/email]

板凳

a = ''
= RAND(-1)
for i = 1 to 100
   a = a + iif(RAND()<0.5, '0', '1')
next

?a

3 楼

谢谢,那请问哦,如果我有一个text,里面的数据为101,那如何做到一边在生成随机数的同时,一边与text里的文本做匹配呢?

4 楼

把2楼的 a = a + iif(RAND()<0.5, '0', '1') 改动一下

a = a + ROUND(RAND(),0)

5 楼

b='101'
a = ''
= RAND(-1)
for i = 1 to LEN(ALLTRIM(b))
   a = a + iif(RAND()<0.5, '0', '1')
next
?a, b, a=b

6 楼

在进一步~~~~

a='00',b='10',系统随机发出1万次序列号,进行1万次匹配,最后得出,a的获胜次数,b的获胜次数,a的最小仲裁长度和最大仲裁长度。每一次都是匹配到才停止,再进行下一轮。

例如,系统发出0110....直到,第四位的出现,才发生匹配,b获胜。

请各位前辈支个招!~谢谢~~~

7 楼

不知道是不是这个意思:

CLEAR
= RAND(-1)
LOCAL i, k, a, b, c, an, bn, zlen

FOR k = 1 TO ROUND(RAND()*5, 0)+1   
    an = 0
    bn = 0
    zlen = ROUND(RAND()*10, 0)+1
    b = randstring(zlen)
    a = randstring(zlen)
    DO WHILE a = b
        a = randstring(zlen)
    ENDDO 
    FOR i = 1 TO 10000
        c = randstring(zlen)
        an = an + IIF(c=a, 1, 0)
        bn = bn + IIF(c=b, 1, 0)
    NEXT
    ? zlen, a, b, an, bn
NEXT


FUNCTION randstring(slen)
LOCAL i, a
a = ''
for i = 1 to slen
   a = a + iif(RAND()<0.5, '0', '1')
next
RETURN a
ENDFUNC


另,‘a的最小仲裁长度和最大仲裁长度’是说什么意思?

8 楼

仲裁长度就是指仲裁器发出多少个随机01序列后,便仲裁出结果,即发现匹配。

例如a=01,b=10,随机序列00110....当出现到第三位时,即发生匹配,a胜出,则该仲裁长度为3
以此类推,10000个序列号发生10000次匹配,则会有不同的仲裁长度。

用foxpro分别算出a和b的获胜次数,以及a和b各自的最大仲裁长度和最小仲裁长度。

请帮忙求解,谢谢!~~~~

9 楼

=RAND(-1)
a="001"
b="110"
amin=0
amax=0
aex=0
lena=LEN(a)
bmin=0    
bmax=0
bex=0
lenb=LEN(b)
s=space(max(lena,lenb))
FOR i=1 TO 10000
    s=s+CHR(48+ROUND(RAND(),0))
    IF RIGHT(s,lena)==a THEN 
       IF amin=0 THEN 
          amin=i 
          amax=i
       ELSE 
          amax=i
       ENDIF 
       aex=aex+1
    ENDIF 
    IF RIGHT(s,lenb)==b THEN 
       IF bmin=0 THEN 
          bmin=i 
          bmax=i
       ELSE 
          bmax=i
       ENDIF 
       bex=bex+1
    ENDIF 
NEXT 
?amin,bmin,amax,bmax,aex,bex

10 楼


CLEAR
= RAND(-1)
LOCAL i, k, a, b, c, zlen, num
LOCAL an, amin, amax, apos, bn, bmin, bmax, apos
num = 100

*!*    FOR k = 1 TO ROUND(RAND()*5, 0)+1   
    an = 0
    bn = 0
    zlen = ROUND(RAND()*3, 0)+1
    b = randstring(zlen)
    amin = num
    amax = 0
    a = randstring(zlen)
    DO WHILE a = b
        a = randstring(zlen)
    ENDDO 
    bmin = num
    bmax = 0
    FOR i = 1 TO 10000
        c = randstring(num)
        apos = AT(a, c)
        bpos = AT(b, c)
*!*            ?apos, bpos
        IF apos>0 and apos<=bpos THEN 
            an = an + 1
            amin = IIF(apos<amin, apos, amin)
            amax = IIF(apos>amax, apos, amax)
        ENDIF 
        IF bpos>0 and bpos<apos THEN 
            bn = bn + 1
            bmin = IIF(bpos<bmin, bpos, bmin)
            bmax = IIF(bpos>bmax, bpos, bmax)
        ENDIF 
*!*        ? an, amin, amax, bn, bmin, bmax
    NEXT
    ? zlen, a, an, amin, amax, b, bn, bmin, bmax
*!*    NEXT


FUNCTION randstring(slen)
LOCAL i, a
a = ''
for i = 1 to slen
   a = a + iif(RAND()<0.5, '0', '1')
next
RETURN a
ENDFUNC

我来回复

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