rand产生随机数怎样控制在1~52内而且不能重复。1~52必须出现一次。谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rand产生随机数怎样控制在1~52内而且不能重复。1~52必须出现一次。谢谢相关的知识,希望对你有一定的参考价值。
不管用什么语言总之方法就这样,你在产生一个1到52的数字之后,然后再保存到一个数组里面,然后每次产生数字后与数组每个数字对比,有相等的就不要重新产生一个,
当然记得变换随机种子,因为种子相同,产生的数列一样追问
能给个example 么?
参考技术A 在C中,如下代码:int a;
a=rand()%52+1;
这样,就可以产生一个从1到52的随机数追问
,51吧?
追答rand()%52可以产生一个从0至51之间的随机数,再加上1,就是从1至52间的随机数了
追问奥,,那怎样区分已经抽的
参考技术B 腾讯:白牛之C 参考技术C 希望能帮到你:#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define NUM 52
int main(void)
int i, j, a[NUM], val, b[NUM] = 0;
for (i = 0; i < NUM; i++)
a[i] = i + 1;
srand(time(NULL));
for (j = 0; j < NUM; j++)
if (b[j] == 0)
val = rand() % 52 + 1;
i = 0;
while(i < NUM)
if (val == a[i])
if (b[i] == 0)
printf("%d\n", a[i]);
b[i] = 1;
j = 0;
break;
else
i++;
return 0;
追问
能这个注解么?才高二
能这个注解么?才高二
追答好。。数组b用来设置标志,for循环用来判断每个标志位;如果b中有一个位是0,那么就产生随即数;while循环用来打印产生的随即数,如果标志位是0,那么打印,然后把标志设为1,跳出循环再来判断b中的标志;否则,因为产生的随机数肯定在52之内,所以只要i++就可以了。
追问你的第一句for语句我没看明作用,能用//加上注解到代码么??谢谢
追答#include #include #include #define NUM 52int main(void) int i, j, a[NUM], val, b[NUM] = 0; for (i = 0; i < NUM; i++) //用for循环来初始化数组a为1,2,......52 a[i] = i + 1; srand(time(NULL)); for (j = 0; j < NUM; j++) //用for循环来判断做标志的b数组 if (b[j] == 0) //如果标志位有是0 val = rand() % 52 + 1;//产生随机数 i = 0; while(i < NUM) //把产生的随即数和a中的数作比较 if (val == a[i]) //如果和a【i]相等 if (b[i] == 0) //并且对应的标志位是0 printf("%d\n", a[i]); //打印那个随即数 b[i] = 1; j = 0; break; else i++;//否则随机数去和下一个数比较 return 0;
追问谢谢
追答不客气。
追问b〖j〗有初始值吗?求加
814865841解答
b数组中的元素处值都是0
追问为0那有什么用?
追答数组b用来做标志,如果是零,表示这个位对应的数组a中的数还没出现过,如果是1,则表示这个位上的数已经出现过
本回答被提问者采纳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位混合的