首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何避免使用rand和srand得到重复的数字?

要避免使用rand和srand得到重复的数字,可以采用以下方法:

  1. 使用更高级的随机数生成器:rand函数是C/C++标准库中提供的伪随机数生成器,其生成的随机数序列是有限的且可预测的。为了避免重复的数字,可以使用更高级的随机数生成器,如C++11引入的random库中的随机数引擎和分布函数,或者使用第三方的随机数库,如Boost.Random库。
  2. 设置随机数种子:srand函数用于设置随机数生成器的种子,如果每次使用相同的种子调用srand函数,那么每次生成的随机数序列都是相同的。为了避免重复的数字,可以使用不同的种子来初始化随机数生成器,可以使用时间戳作为种子,确保每次生成的随机数序列都是不同的。
  3. 使用集合或哈希表:如果需要生成一系列不重复的随机数,可以使用集合或哈希表来存储已生成的随机数,每次生成新的随机数时,先检查是否已存在于集合或哈希表中,如果存在则重新生成,直到生成一个不重复的随机数。
  4. 使用洗牌算法:洗牌算法是一种将元素随机打乱顺序的算法,可以用于生成不重复的随机数序列。可以将需要生成随机数的范围作为元素,使用洗牌算法打乱顺序,然后按顺序取出元素作为随机数。

总结起来,避免使用rand和srand得到重复的数字的方法包括使用更高级的随机数生成器、设置不同的随机数种子、使用集合或哈希表存储已生成的随机数、使用洗牌算法生成不重复的随机数序列。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于如何rand(),srand()time()函数创建简单随机数

1随机数创建 需要rand()函数来创建,这个函数可以返回整形随机数,但是需要一个种子,如果没有就是rand()括号里内容。...但是创建主函数如果不填参数main()一样,rand()里如果不填默认是填1,也就是种子1。每一个种子都可以返回特定且唯一随机数。...但是我们不能直接在rand()函数里面改,会报错如: 2srand函数运用: 不能直接改这时候我们需要一个函数srand来修改每次种子值,但是每次修改太麻烦了,这时候我们可以再引用本章第三个函数time...NULL也是空意思。加上这一条件我们就可以提前修改种子啦! 这时候我们再运行 这样就得到了与一开始不一样三个随机数了,如果再运行一次会再得到三个不同随机数。这样就实现了随机数生成了。...总结: 1我们需要三个函数srand(),rand()与time() 2别忘了包含函数头文件#include,#include 3srand()函数修改种子依靠time

8210
  • 计算机小白成长历程——分支与循环(9)

    ,需要使用srand函数为rand函数设置伪随机数生成器。...接下来我们看一下第三个问题: (3)srand函数是什么?该如何使用srand函数又是一个陌生函数,我们继续查阅MSDN来了解它: 看着感觉很难理解对吧!...那srand又是如何使用呢?我们接着查阅MSDN: 从软件中举例子我们可以看到它在调用时候使用了一个函数——time,这个函数又是什么呢?...那我们使用2/3/4分别测试一下: 通过这个测试我们就可以发现,当srand参数发生变化时,rand初始值也会发生变化,那我们如果在里面放入一个会变化参数,是不是就能解决我们问题了呢?...((unsigned int)time(NULL)); //这里使用unsigned int是因为如果是32位操作系统,time数据类型是long,有符号长整型; //为了避免更换操作系统而出现报错

    18020

    C++ randsrand 用法

    (注意:小M多项式序列周期是65535,即每次利用一个随机种子生成随机数周期是65535,当你取得65535个随机数后它们又重复出现了。)...用 unsigned int 双字节是 65535,四字节是 4294967295 整数范围。0~RAND_MAX 每个数字被选中机率是相同。...用户未设定随机数种子时,系统默认随机数种子为 1。 rand() 产生是伪随机数字,每次执行时是相同; 若要不同, 用函数 srand() 初始化它。...3.使用当前时钟作为随机数种子 rand() 产生随机数在每次运行时候都是与上一次相同。若要不同, 用函数 srand() 初始化它。...; 3) 根据需要多次调用rand(),从而不间断地得到随机数; 4) 无论什么时候,都可以给srand()提供一个新种子,从而进一步"随机化"rand()输出结果。

    1.8K20

    基于数组程序设计方法----乒乓球抽取

    在C语言中取随机数所需要函数是: int rand(void); void srand (unsigned int n); rand()函数srand()函数被声明在头文件stdlib.h中,所以要使用这两个函数必须包含该头文件...RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。 srand()函数使用自变量n作为种子,用来初始化随机数产生器。...只要把相同种子传入srand(),然后调用rand()时,就会产生相同随机数序列。因此,我们可以把时间作为srand()函数种子,就可以避免重复发生。...如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生结果一样。...{ printf(“%d”,rand()); } 使用方法二: for (int i=0;i<10;i++) { srand((unsigned int)time(NULL)); printf(

    59000

    C++随机数(randsrand)函数用法详解

    C++ 提供了一组函数以生成使用随机数字。随机数字就是从一组可能值中进行随机选择而获得一个值。该组中值都有相同被选中几率。...可以创建使用随机数字公式以确定特定事件在程序中出现时间。 数据分析程序可能会使用随机数字随机选择要检验数据。 计算机安全系统使用随机数字来加密敏感数据。...以下是其用法示例: randomNum = rand(); 但是,该函数返回数字其实是伪随机数。这意味着它们具有随机数表现属性,但实际上并不是随机,它们实际上是用算法生成。...要将随机数范围限制在 1 某个最大值 max 之间整数,可以使用以下公式: number = rand() % max + 1; 例如,要生成 1〜6 随机数来代表骰子点数,则可以使用以下语句...方法二:   既然使用rand函数无法获取到变化随机数,这里就可以使用srand来实现了。

    4.5K30

    Flume如何使用SpoolingDirSourceTailDirSource来避免数据丢失风险?

    异步source缺点 execsource异步source一样,无法在source向channel中放入event故障时(比如channel容量满了),及时通知客户端,暂停生成数据,容易造成数据丢失...SpoolingDirSourceexecsource不同,SpoolingDirSource是可靠!即使flume被杀死或重启,依然不丢数据!...如果日志在正在写入时,名称为 xxxx.tmp,写入完成后,滚动,改名为xxx.log,此时一旦匹配规则可以匹配上述名称,就会发生数据重复采集!...Json文件中,位置是可以修改,修改后,Taildir Source会从修改位置进行tail操作!如果JSON文件丢失了,此时会重新从 每个文件第一行,重新读取,这会造成数据重复!...配置文件 使用TailDirSourcelogger sink #a1是agent名称,a1中定义了一个叫r1source,如果有多个,使用空格间隔 a1.sources = r1 a1.sinks

    2K20

    【C语言实战项目】猜数字游戏

    则需要使用switch do while循环来实现。 2.系统生成随机数时需要使用rand函数(rand()会返回一个范围在0到RAND_MAX(至少是32767)之间伪随机数(整数)。...在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生随机数也会相同。)...同时srand种子可使用传入时间戳方式来确定入口。 如果还有不了解rand()函数朋友可以移步【C语言】rand()函数详解,里面有非常详细关于rand()函数0基础详解。...同时缩小猜测范围时需要新引入两个变量(cd),在if语句中将用户猜测失败数字赋予c/d,用以下一步提醒用户缩小猜测范围使用。当用户“猜中”数字时,祝贺并结束程序即可。...,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1 //随机种子相同,每次产生随机数也会相同 //为了避免每次游戏产生随机数入口都相同情况

    11210

    三篇文章让你彻底学会C语言中分支循环语句——(三)实践巩固

    前言 学完并掌握了前面的分支循环语句,现在我们也可以实现一些简单有趣功能了,下面我们通过写一个简单游戏——猜数字游戏,来实践巩固以下我们学习成果。...第二次运行结果 我们可以看到虽然⼀次运行中产生5个数字是相对随机,但是下一次运行程序生成结果上⼀次⼀模⼀样,这就说明有点问题。...> #include #include int main() { //使用time函数返回值设置种子 //因为srand参数是unsigned...1.4 设置随机数范围 因为我们要生成1~100之间数,但不好直接得到,我们可以先生成0~99之间随机数,方法如下: rand() % 100; //因为除以是100,所以余数范围是0 ~ 99...然后就可以很容易得到1~100之间随机数了,方法如下: rand() % 100 + 1; //% 100余数是0 ~ 99, 0 ~ 99数字+1, 范围就是1 ~ 100了 然后还可以继续推广

    6110

    【编程经验】C语言中如何使用随机数?

    C语言中如何使用随机数 随机数使用,是不少在学C语言过程中进行一些小功能开发同学一个技术问题,今天我们就为大家讲解如何在C语言中使用随机数。...这个时候你可能会遇到下面几个问题: Q1:为什么每次生成数字都一样? A1:rand函数每次生成数字与所谓”种子”有关,使用rand函数前需要使用srand函数进行种种子(请见后文)。...A2:这可能取决于编译器环境,笔者这里是VC6,在rand函数中看到定义最大值为0x7fff,如下图: ? Q3:如果我想生成特定范围内数字,该如何写呢? A3:多多利用%求余运算符即可。...如: 生成10以内数字,可以参考rand()%10 生成1~10之间数字,可以参考rand()%10+1 特定,要生成a~b之间数字,可以参考rand()%(b-a+1)+a 而更多时候...函数如何使用呢,先看函数原型: void srand(unsigned seed); 只需要在rand函数使用之前,调用srand函数传入一个种子即可。

    2.7K80

    C语言_分支循环语句(3)

    前言 :C语言:结构化程序设计语言 顺序结构、选择结构、循环结构: ---- 提示:以下是本篇文章正文内容,下面案例可供参考 一、猜数字游戏 1.1.电脑随机生成一个数(1~100); 1.2.猜数字...如何产生随机数 --- rand 函数 rand 包含头文件是 1.4.rand srand 之间联系 rand 使用之前先调用 srand srand 只要调用一次就可以啦,不要每次生成随机数都设置...srand rand 是生成随机数,而srand是在生成随机数之前先设置随机数生成起点 ---- 5.猜数字游戏源码 #define _CRT_SECURE_NO_WARNINGS #include<...%100 得到余数只可能是小于100 --- 0~99 //rand()%100+1 随机数范围是 1~100 //printf("%d\n", ret); //...多层循环这种情况使用break 是达不到目地,他只能从最内层循环退出到上一层循环。

    18220

    C语言(扫雷游戏)

    其实这一步有很多种方法,想要怎么设计完全由你自己决定,这里我们不妨就定义字符 ‘0’ 为雷,字符 ‘1’ 为非雷吧,至于为什么要定义为字符而不是我们常见数字10,其实是有原因。...其次,埋雷的话肯定是要随机埋10个雷,那就要产生10个随机坐标,产生随机数函数我们在之前数字小游戏中已经使用过,这里就不过多介绍了。...((unsigned int)time(NULL));//调用rand函数之前先要调用srand函数 do { menu(); printf("请选择:"); scanf("%d", &...我们不难发现,(x,y)周围8个坐标分别可以表示为x或y加-1、0、1得到9个坐标,然后把这9个坐标的值分别进去字符 ‘0’,使其转换为整型再加起来,经过处理就能得到个数。... //game.c文件中包含game.h,避免重复引用 void menu() { printf("##########################\n");

    5910

    【C语言】猜数字小游戏一步一步实现

    "%d\n", rand()); printf("%d\n", rand()); return 0; } 第一次运行: 第二次运行: 这里我们重复运行一次进行对比就可以看出来,两次打印随机数一模一样...那也就是说给srand种⼦是如果是随机rand就能⽣成随机数;在⽣成随机数时候⼜需要⼀个随机数,这就⽭盾了 三、 time 在程序中,我们通常使用程序运行时间作为种子,因为时间是不断变化...~200 所以如果要⽣成a~b随机数,⽅法如下: 所以如果要⽣成a~b随机数,⽅法如下: a + rand()%(b-a+1) 五、猜数字游戏实现 5.1打印菜单 首先菜单一点是要打印,因此我们可以使用...return 0; } 5.3 生成 打印菜单,选择游戏进行结束,这些过程我们要来实现函数核心部分:猜数字。...所以我们可以通过前面的 rand ,srand time 函数来生成0—100数: void menu() { printf("**** 猜数字小游戏 ****\n");

    21710

    【干货】小白如何熟练掌握C语言随机数!

    随机数使用,是不少小伙伴在学C语言过程中都会遇到一个坎,今天老九为大家讲解如何在C语言中使用随机数。 通常情况下,使用最多方法就是使用rand函数随机生成伪随机数来完成随机数生成工作。...这个时候我们可能会遇到下面几个问题: Q1:为什么每次生成数字都一样? A1:rand函数每次生成数字与所谓”种子”有关,使用rand函数前需要使用srand函数进行种种子(请见后文)。...A1:这可能取决于编译器环境,老九这里是VC6,在rand函数中看到定义最大值为0x7fff,如下图: ? Q3:如果我想生成特定范围内数字,该如何写呢? A3:多多利用%求余运算符即可。...如: 生成10以内数字,可以参考rand()%10 生成1~10之间数字,可以参考rand()%10+1 特定,要生成a~b之间数字,可以参考rand()%(b-a+1)+a 更多时候,我们希望每次运行生成数字都不相同...那么srand函数如何使用呢,先看函数原型: void srand(unsigned seed); 只需要在rand函数使用之前,调用srand函数传入一个种子即可。

    2K71

    matlab如何使用random函数,random函数

    rand( )应该小写,需要加载头文件 拓展资料 rand( )函数不是真正随机数生成器,而srand()会设置供rand()使用随机数种子。...如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同数调用 rand()会导致相同随机数序列被生成。...反之,有些时候伪随机数精确重复也是有用。这可以在一个随机系列开始前,通过调用一个使用固定数值randomSeed()函数来完成。...j=rand()%100+1; } JAVA中如何使用Random函数,该使用那些类?...JAVA中如何使用Random函数,该使用那些类?具体如何吊用?… JAVA中如何使用Random函数,该使用那些类?具体如何吊用?

    3.8K30

    扫雷附展开

    注意事项:尽量使用宏定义常量,这样的话在后期想要更改棋盘大小时只需要简单对宏定义常量进行修改。...srand来实现 随机值: srand((unsigned int)time(NULL)); c=rand();//c此时就是随着时间戳函数变化随机值 具体实现: 注意事项:rand()%ROW值是...也就是我们之前初始化内容,便可以得到这个坐标周围雷数,把雷数再传回这个坐标,便可以将这个坐标修改为周围雷数。...注意事项:由于计算出来是雷数目这是个整型变量,那么在外面也应该用整型接收,并加上一个'0'才是相对应数字字符。...(1)避免越界 if (z_i > ROW || 1 > z_i || z_j > COL || 1 > z_j) return; (2)避免重复 if(board[z_i][z_j] ==

    12410
    领券