描述
产生一个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值转换为表示本地时间的字符串