TC官方合作论坛

 找回密码
 立即注册
查看: 1112|回复: 9
打印 上一主题 下一主题

[已解决] 请问用生成的随机数如何才能不重复

[复制链接]
跳转到指定楼层
楼主
发表于 2014-5-7 11:41:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如:
  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

回复

使用道具 举报

5#
发表于 2014-5-7 15:19:39 | 只看该作者
  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
复制代码


按照上面的意思,基本上这样可以了
回复 支持 反对

使用道具 举报

沙发
发表于 2014-5-7 11:57:51 | 只看该作者
取出随机数加个判断看是不是重复的,.当然了前提是你每次取出的随机数要保存下
回复 支持 反对

使用道具 举报

板凳
发表于 2014-5-7 12:18:08 | 只看该作者
本帖最后由 石中草 于 2014-5-7 12:20 编辑

楼上正解
回复

使用道具 举报

地板
 楼主| 发表于 2014-5-7 14:21:53 | 只看该作者
hu863063648 发表于 2014-5-7 11:57
取出随机数加个判断看是不是重复的,.当然了前提是你每次取出的随机数要保存下 ...

请问这样要怎么写?
回复 支持 反对

使用道具 举报

6#
发表于 2014-5-7 15:31:24 | 只看该作者
xqxujun 发表于 2014-5-7 15:19
按照上面的意思,基本上这样可以了

兄弟,你的图案箭头有问题吧= =
回复 支持 反对

使用道具 举报

7#
发表于 2014-5-7 15:34:26 | 只看该作者
hu863063648 发表于 2014-5-7 15:31
兄弟,你的图案箭头有问题吧= =

签名?算了,懒得改了。。
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2014-5-7 17:57:12 | 只看该作者
感谢大家的帮助,最后找到了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
复制代码
回复 支持 反对

使用道具 举报

9#
发表于 2014-5-7 20:22:22 来自手机 | 只看该作者
其实你范围大一点重复的概率就小了  伪随机数都这样
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2014-5-8 16:48:36 | 只看该作者
rainshine 发表于 2014-5-7 20:22
其实你范围大一点重复的概率就小了  伪随机数都这样

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

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-9-27 09:35 , Processed in 0.154903 second(s), 23 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表