生成一串随机数的算法_发牌问题

2 篇文章 0 订阅
1 篇文章 0 订阅

例子:从1-40之间随机取出n个数值,返回一个随机数的数组

 

这是一个很常见的算法,通常的做法是建立一个数组,从里面取出第一个数a,再取第二个数b,此时需要判断b不等于a才行,否则就需要重新生成,再取出第三个数c,c不能等于a或者b,依次类推,越到后面,由于没被选中的数字越少,就会不断的生成随机数,结果发现已经被生成过了,又不断的被放回去,这样效率肯定会有问题。

 

其实这是一个发牌的问题,解决的方法也很简单,只需要取出a后,将a和数组下标1的数字和a对调,再次生成随机数的时候,就别从下标1-40之间取,而是从2-40之间取值,得到b后,将下标2的数字和b对调。依次类推。这里因为使用的vbs,所以其实是0-39下标。生成的结果就在数组的0-n-1中。

 

 

 

'显示输入框,将输入内容赋值给i

n = InputBox("请输入n(6-40)",VbOnlyOk, "18")

 

dim arr1(39)

for i=0 to 39

  arr1(i)=i+1

next

 

lngMax=39

lngTmp=lngMax

strData=""

 

for i=0 to n-1

  lngRand=rnd_Integer(i,lngMax)

 

  lngTmp=arr1(lngRand)

  arr1(lngRand)=arr1(i)

  arr1(i)=lngTmp

Next

 

Dim arr2()

ReDim arr2(n-1)

for i=0 to n-1

  arr2(i)=arr1(i)

next

 

 

'得到一个Min和Max之间的随机数
Function rnd_Integer(Min,Max)
Randomize
rnd_Integer = int((Max-Min)*Rnd()+Min)
End Function

 

这个例子很典型,留着做个参考吧

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Testingba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值