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/shdeclare -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必须出现一次。谢谢的主要内容,如果未能解决你的问题,请参考以下文章
怎样用Excel随机函数rand()生成随机数字和大写字母,能自动产生4位混合的