随机数、、

描述

产生一个1-10000的随机数,输入5个数字,如果符合随机数,则输出True,如果都不符合,则输出False

输入

输入五个数字

输出

输出True或者False

输入样例 1 

1 100 111 1111 2555

输出样例 1

False
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
	int a[5];
	bool shuchu = true;
	for (int i = 0; i < 5; i++)
	{
		cin >> a[i];
	}
	srand((unsigned)time(NULL));
	int c = rand() % 10000 + 1;
	for (int i = 0; i < 5; i++)
	{
		if (a[i] == c)
			shuchu = true;
		else shuchu = false;
	}
	if (shuchu)
		cout << "True";
	else cout << "False";
	return 0;
}

问题点:

①:头文件<stdlib.h>提供函数rand。

函数原型:int rand(void);

函数功能:产生0到32767间的随机整数

函数返回:随机整数

②:rand()产生随机数

如果要生成一定范围内的随机数可以采用 rand()%RAND_MAX。

cout<<rand()%100<<endl;     //生成0~99的随机数

如要产生[m,n]范围内的随机数num,可用:

int num=rand()%(n-m+1)+m;

rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。rand()返回一随机数值的范围在0至RAND_MAX 间。

RAND_MAX的范围最少是在32767之间(int),用unsigned int 双字节是65535,四字节是4294967295的整数范围。

0~RAND_MAX每个数字被选中的机率是相同的。用户未设定随机数种子时,系统默认的随机数种子为1。rand()产生的是伪随机数字,每次执行时是相同的,若要不同,用函数srand()初始化它。

③:srand函数用来播种随机种子,能够产生一个随机数。(播下种子,它啥样大家都不知道)

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用time(0)的返回值或NULL来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。"相同的种子对应相同的数值"。

该部分选自随机数(rand)和随机数种子(srand)的理解_rand预srand_大杨在线的博客-CSDN博客

④:不过为了防止随机数每次重复,常常使用系统时间来初始化。

即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t));

还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的数据。

当srand()的参数值固定的时候,rand()获得的数也是固定的,所以一般srand的参数用time(NULL),因为系统的时间一直在变,所以rand()获得的数,也就一直在变,相当于是随机数了。只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。如果想在一个程序中生成随机数序列,需要至多在生成随机数之前设置一次随机种子。

即:只需在主程序开始处调用srand((unsigned)time(NULL)); 后面直接用rand就可以了。

不要在for等循环放置srand((unsigned)time(NULL));

该部分选自

srand((unsigned)time(NULL))详解_清风lsq的博客-CSDN博客

⑤:头文件<time.h>

常用函数:

time:获取当前系统时间(UTC时间)的time_t值

ctime:将time_t值转换为表示本地时间的字符串

该部分选自C++ time.h 库详解_c++计时库_Collapsar_G的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值