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/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()随机函数产生的值的范围?