随机数生成器机制
Random Number Generator mechanism
我的书有以下问题:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
clrscr();
randomize();
int Game[]={10,16},P;
int Turn=random(2)+5;
for(int T=0;T<20;T++)
{
P=random(2);
cout<<Game[P]+Turn<<"#";
}
getch();
}
输出类似16#22#16#16#16#22#....20倍……为什么输出总是16#或22#?为什么不是15号或21号?我想介绍一下这个程序的机制。谢谢。把=随机(2)+ 5;如果随机(2)给出0,那么turn就变成了turn=0+5=5,这意味着我应该得到10+5=15和16+5=21以及16和22,但我没有得到它们。
我们在计算机科学理论考试中遇到了上面的问题,我们要选择正确的答案。E,它生成16和22)但是我怎么知道它只生成16和22。正如我上面解释的,15和21也是可能的。
也许这有帮助:
没有设置随机数生成器的种子。
如果你调用srand(time(NULL)),那么你将得到更多的随机结果
c++ rand()在运行进程
您需要给出一个seed
值,这将有助于获得"真正"随机。数
计算机不能自己随机化数字,它使用了一个种子。
但是种子并不是完全随机的,它们只是有特定的顺序,比如:
1
2
8
5
4
这些数字看起来很随机,但是当你下次运行程序时,你会得到:
1
2
8
5
4
完全一样。
为了防止这种情况,我们使用时间作为种子,时间总是在变化,所以它总是会产生新的数字。
#include <time.h>
srand(time(NULL)); // srand is the function to randomize numbers from a seed, we use 'time' as seed here
这个视频解释了
因为Turn
只随机化一次-在循环开始时。如果你把Turn
的赋值移到循环中,你也应该得到15
和21
:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
clrscr();
randomize();
int Game[]={10,16},P;
int Turn;
for(int T=0;T<20;T++)
{
P=random(2);
Turn=random(2)+5;
cout<<Game[P]+Turn<<"#";
}
getch();
}
另外,正如其他人所说,如果您希望每次运行的输出不同,则需要为随机数生成器设置种子,例如,通过使用种子调用srand()
。例如:
#include <time.h>
(...)
srand(time(NULL));
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 制作具有平均值的随机数生成器
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 尝试在 c++ 中创建随机数生成器并收到错误
- 存储并重新加载随机数生成器状态
- 作为随机数生成器的争用条件
- 播种随机数生成器以使用分叉的好方法是什么?
- 随机数生成器的性能因平台而异
- 随机数生成器的种子和状态有什么区别?
- RcppShark 随机森林示例引发有关随机数生成器的异常
- C++多个实例的随机数生成器组种子中增强
- C++随机数生成器仅生成 0 - C++ 11
- GSL+OMP:C++中的线程安全随机数生成器
- 贪吃蛇游戏 - 食物瓷砖的随机数生成器
- 随机数生成器在 C++ 用于 skipList.
- RSA 加密和解密期间的随机数生成器要求
- 如何使用 cpp 设置随机数生成器的语法?
- 产生相同结果的随机数生成器
- C++随机数生成器通常在 Visual Studio 中运行程序时在 2 次后停止生成数字
- 随机数生成器机制