rand产生随机数怎样控制在1~52内而且不能重复。1~52必须出现一次。谢谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rand产生随机数怎样控制在1~52内而且不能重复。1~52必须出现一次。谢谢相关的知识,希望对你有一定的参考价值。

计算机产生随机数实际上是使用被成为“伪随机数”的算法,只要你给的种子(通过srand传递的)相同,那么产生的随机数序列就是相同的,这就是为什么如果你去掉srand后,每次运行产生的序列都相同(每次运行种子都相同);但如果你将srand放入循环,且传入的种子是时间戳,那么只要这个时间戳相同,种子便相同,rand()产生的随机序列也相同。循环的每次迭代执行时间极短,按照你的陈述,在你机器上基本上是每迭代两次,使用的是同一个时间戳,故这两个值是相同的。
解决方案:将srand移出循环外部。
参考技术A 不管用什么语言总之方法就这样,
你在产生一个1到52的数字之后,然后再保存到一个数组里面,然后每次产生数字后与数组每个数字对比,有相等的就不要重新产生一个,
当然记得变换随机种子,因为种子相同,产生的数列一样
参考技术B 在C中,如下代码:
int
a;
a=rand()%52+1;
这样,就可以产生一个从1到52的随机数

shell脚本生成[4,9]范围内的随机整数,包含边界值4和9,并将随机数序列存放在一个数组中,脚本实现?

要求不能有重复的随机数

#!/bin/sh
declare -a arr #声明arr为数组
arr=(`seq 4 9 | awk 'BEGINsrand();ORS=" " b[rand()]=$0 ENDfor(x in b) print b[x]'`)
echo $arr[*] #打印数组array的所有元素
exit 0

说明:
生成[4,9]范围内不重复的随机整数,并保存到数组arr中。
seq 4 9 用于生成4~9的整数序列(包含边界值4和9)。
awk中的rand() 函数用于随机产生一个0到1之间的小数值(保留小数点后6位)。
由于rand()只生成一次随机数,要使用srand() 函数使随机数滚动生成(括号里留空即默认采用当前时间作为随机计数器的种子)。这样以秒为间隔,随机数就能滚动随机生成了。

限制:
由于以秒为间隔,所以如果快速连续运行两次脚本(1s内),你会发现生成的随机数还是一样的。
参考技术A #!/bin/bash

declare -a array #声明array是数组
for i in `seq 10` #产生10个随机数
do
array[$i]=$((RANDOM%6+4)) #RANDOM是bash shell内置的随机变量,表达式可修改
echo $array[$i] #打印验证
done

exit 0
至于不能有重复的随机数,LZ你再修改下吧!

以上是关于rand产生随机数怎样控制在1~52内而且不能重复。1~52必须出现一次。谢谢的主要内容,如果未能解决你的问题,请参考以下文章

c++中产生不重复的随机数

怎样用Excel随机函数rand()生成随机数字和大写字母,能自动产生4位混合的

excel中RAND函数产生随机数的概率控制

EXCEL,怎么让随机数据rand函数的数据随机范围在单元格数字范围之内?

jquery js 不重复随机数

rand()随机函数产生的值的范围?