TC官方合作论坛

标题: 请问用生成的随机数如何才能不重复 [打印本页]

作者: lx0113    时间: 2014-5-7 11:41
标题: 请问用生成的随机数如何才能不重复
如:
  1. for(3)
  2.   随机数=辅助.随机数(1,5)
  3.         traceprint("随机数:"&随机数)
  4. help.sleep(1000)
  5. endif
复制代码
循环3次
随机提取3个数字

问:

如何让每次生成的随机数不重复

比如是1.3.5 或 2,1,4

而不是1,1,5 或 4,2,4


作者: hu863063648    时间: 2014-5-7 11:57
取出随机数加个判断看是不是重复的,.当然了前提是你每次取出的随机数要保存下
作者: 石中草    时间: 2014-5-7 12:18
本帖最后由 石中草 于 2014-5-7 12:20 编辑

楼上正解
作者: lx0113    时间: 2014-5-7 14:21
hu863063648 发表于 2014-5-7 11:57
取出随机数加个判断看是不是重复的,.当然了前提是你每次取出的随机数要保存下 ...

请问这样要怎么写?
作者: xqxujun    时间: 2014-5-7 15:19
  1. a=array[]
  2. function rand()
  3.    
  4.     for(5)
  5.           
  6.       随机数=辅助.随机数(1,10)
  7.       while(ttt.check(随机数))
  8.           随机数=辅助.随机数(1,10)
  9.       endwhile
  10.       arraysp.add(a,随机数)
  11.       traceprint("随机数:"&随机数)
  12.     endfor
  13. endfunction
  14. function check(num)
  15.     len
  16.     arraysp.size(a,len)
  17.     if(len==0)
  18.         return false
  19.     endif
  20.     for(i=0;i<len;i++)
  21.         if(a[i]==num)
  22.             return  true
  23.         endif
  24.     endfor
  25.     return false
  26. endfunction
复制代码


按照上面的意思,基本上这样可以了
作者: hu863063648    时间: 2014-5-7 15:31
xqxujun 发表于 2014-5-7 15:19
按照上面的意思,基本上这样可以了

兄弟,你的图案箭头有问题吧= =
作者: xqxujun    时间: 2014-5-7 15:34
hu863063648 发表于 2014-5-7 15:31
兄弟,你的图案箭头有问题吧= =

签名?算了,懒得改了。。
作者: lx0113    时间: 2014-5-7 17:57
感谢大家的帮助,最后找到了Rainshine的随机数改了下。效果很棒~



  1. ret_a=测试.rnd(3)
  2.     for(i=0;i<3;i++)
  3.         ret_s&=ret_a[i]
  4.         traceprint(ret_s)
  5.         
  6.         选择(ret_s)
  7.             条件 1:
  8.             traceprint("我是条件1")
  9.             条件 2:
  10.             traceprint("我是条件2")
  11.             条件 3:
  12.             traceprint("我是条件3")
  13.             条件 4:
  14.             traceprint("我是条件4")
  15.             条件 5:
  16.             traceprint("我是条件5")
  17.         选择结束
  18.         
  19.         help.sleep(1000)
  20.     endfor

  21. function rnd(size,MIN=1,MAX=5)
  22.     if(MAX-MIN>size)
  23.         arr=array[]
  24.         for(i=0;i<size;i++)
  25.             ret=help.randto(MIN,MAX)
  26.             if(arraysp.find(arr,ret)!=-1)
  27.                 i--
  28.                 continue
  29.             endif
  30.             arraysp.add(arr,ret)
  31.         endfor
  32.         return arr
  33.     else
  34.         return null
  35.     endif
  36. endfunction
复制代码

作者: rainshine    时间: 2014-5-7 20:22
其实你范围大一点重复的概率就小了  伪随机数都这样
作者: lx0113    时间: 2014-5-8 16:48
rainshine 发表于 2014-5-7 20:22
其实你范围大一点重复的概率就小了  伪随机数都这样

只是小功能,只需要他在5个特定的动作中执行3个就可以了




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1