C语言实现不重复随机数生成器及退出功能详解

这是一段用C写的代码,不会重复生成随机数,只能输入q才能退出程序。

C语言实现不重复随机数生成器及退出功能详解

#包括

#包括

#包括

#定义最大100

int 主函数(无效)

int i, j, flag, num, a[MAX] = { 0 }, max, ch;

srand((无符号)时间(NULL));

printf("请输入最大数量(q退出):");

a:while ((scanf("%d", &max)) == 1)

如果(最大值 >= 40)

printf("请输入最大数量(q退出):");

while (getchar() != '\n')

继续;

继续;

对于 (i = 0; i < 最大值; ++i)

do{num = rand() % 41 + 1;

} while(num==8||num==36);

标志=1;

对于 (j = 0; j < i; ++j)

if (num == a[j] || num == 8 || num == 36)

标志= 0;

休息;

如果(标志)

a[i] = 数字;

别的

- 我;

尽管

(getchar() != '\n') 继续;

对于 (i = 0; i < 最大值; ++i)

printf("%d", a[i]);

printf("\n");

printf("请输入最大数量(q退出):");

if (getchar() != 'q')

puts("q 退出,请!");

printf("请输入最大数量(q退出):");

while (getchar() != '\n')

继续;

转到一个;

printf("再见!");

返回0;

这里有更详细的解释,你可以看一下

在C语言中,rand()函数可以用来生成随机数,但这并不是真正意义上的随机数。它是基于数字的伪随机数。我们可以称其为种子。它是基于一定的数字。通过递推公式计算出的系数。当这一系列数字非常大时,与正常发布是一致的,相当于生成随机数,但这并不是真正的随机数。当计算机正常开机时,这个种子的值是固定的,除非你为了改变这个种子的值而破坏系统,C提供了srand()函数,它的原型是void srand(int a)。

也许大家都知道C语言中的随机函数random,但是random函数并不是ANSI C标准,所以random函数在gcc、vc等编译器下是无法编译的。

rand() 将返回一个范围从 0 到 RAND_MAX 的随机值。返回 0 到 RAND_MAX 之间的随机值。 RAND_MAX 在 stdlib.h 中定义(其值至少为 32767)。我的运算结果是一个不定数,具体取决于你定义的变量类型。对于int来说是32767。在调用该函数生成随机数之前,必须先使用srand()设置随机数种子。如果没有设置随机数种子,rand()在调用时会自动将随机数种子设置为1。一般用for语句来设置种子数。有关详细信息,请参阅下面的示例。

如何生成不可预测的随机序列?

使用 srand((unsigned int)(time(NULL)) 是一种方法,因为每次运行程序的时间都不同。

C语言提供的随机数生成器的使用:目前的C编译器提供了基于ANSI标准的伪随机数生成器函数来生成随机数。它们是 rand() 和 srand() 函数。这两个函数的工作流程如下:

1)首先向srand()提供一个种子,它是一个unsigned int类型,取值范围为0到65535;

2) 然后调用 rand(),它将根据提供给 srand() 的种子值返回一个随机数(0 到 32767 之间)

3)根据需要多次调用rand()以不间断地获取新的随机数;

4) 任何时候,您都可以向 srand() 提供新的种子,以进一步“随机化”rand() 的输出。

下面是0~32767之间的随机数程序:

#包括

#包括

#include //使用当前时钟作为种子

无效主(无效)

{int 我;

srand( (无符号)时间( NULL ) ); //初始化随机数

for( i = 0; i < 10;i++ ) //打印出10个随机数

printf( " %d\n", rand() );

根据上面的程序,你可以轻松得到一个0到1之间的随机数:

#包括

#包括

#包括

主要的( )

{int 我;

srand( (无符号)时间( NULL ) );

for( i = 0; i < 10; i++ )

printf( "%5.2f\n", rand()/32767.0);

要生成 1 到 100 之间的随机数,可以这样写:

#包括

#包括

#包括

主要的( )

{int 我;

srand( (无符号)时间( NULL ) );

for( i = 0; i < 10; i++ )

printf("%d\n", rand()0+1);

二、三个通用随机数生成器,推荐第三个

函数名称: 兰特

功能:随机数生成器

用法:无效兰特(无效);

程序示例:

#包括

#包括

int 主函数(无效)

整数我;

printf("0到99的十个随机数\n\n");

对于(i=0;我

printf("%d\n", rand() % 100);

返回0;

函数名称:随机

功能:随机数生成器

用法: int random(int num);

程序示例:

#包括

#包括

#包括

/* 打印 0 到 99 范围内的随机数 */

int 主函数(无效)

随机化();

printf("0-99范围内的随机数:%d\n", random(100));

返回0;

函数名称:随机化更好!

功能:初始化随机数生成器

用法:无效随机化(无效);

程序示例:

#包括

#包括

#包括

int 主函数(无效)

整数我;

随机化();

printf("0到99的十个随机数\n\n");

对于(i=0;我

printf("%d\n", rand() % 100);

返回0;

随机数生成算法在《常用计算机算法》中有介绍

3. 如何生成设定范围内的随机数

由于rand生成的随机数范围是0到rand_max,而rand_max是一个非常大的数,那么如何生成从X到Y的数字呢?

从X到Y,有Y-X+1个数,所以要生成从X到Y的数,只需要这样写:

k=rand()%(Y-X+1)+X;

通过这种方式,您可以生成任何您想要的范围内的随机数。

四、生成不重复随机数

1)

#包括

#包括

#包括

#包括

swap(int *pm,int *pn)/*必须使用指针进行交换*/

国际温度;

温度=*下午;

*pm=*pn;

*pn=温度;

int 主函数(无效)

因蒂,a[513];

/*int *pa,*pb;*/

srand( (无符号)时间( NULL ) ); /*定义这个生成不同的随机数*/

for(i=1;i=1;i--)

/* pa=&a[i]; pb=&a[rand()%i+1];*/

swap(&a[i], &a[rand()%i+1]);/*加一是从1到i随机,不会包含0*/

/*不再需要定义指针了,所以结论是一样的*/

printf("\n");

对于(i=1;i

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读