在这个相当基本的C++代码片段中,涉及随机数生成:
include <iostream>
using namespace std;
int main() {
cout << (rand() % 100);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么我总是得到41的输出?我试图让它输出0到100之间的一些随机数.也许我不理解rand函数是如何工作的?
0x9*_*x90 34
你需要改变种子.
int main() {
srand(time(NULL));
cout << (rand() % 101);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在srand播种的事情是真实的也是一个c语言代码.
另见:http: //xkcd.com/221/
Dun*_*ter 10
对于它的价值,你也只生成0到99(含)之间的数字.如果您想生成0到100之间的值,则需要.
rand() % 101
Run Code Online (Sandbox Code Playgroud)
除了调用别人提到的srand()之外.
小智 6
你没有播种这个号码.
用这个:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand(static_cast<unsigned int>(time(0)));
cout << (rand() % 100) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你只需要播种一次.基本上不要每个随机数播种.
小智 6
srand()种子随机数发生器.没有种子,生成器无法生成您正在寻找的数字.只要对随机数的需求不是安全关键的(例如任何类型的加密),通常的做法是使用库中的time()函数将系统时间用作种子<ctime>:srand(time(0)).这将使随机数生成器播种,系统时间表示为Unix时间戳(即自1970年1月1日以来的秒数).然后,您可以使用它rand()来生成伪随机数.
以下是重复问题的引用:
原因是从rand()函数生成的随机数实际上不是随机数.这只是一种转变.维基百科更好地解释了伪随机数生成器的含义:确定性随机比特生成器.每次调用rand()时,都会生成种子和/或生成的最后一个随机数(C标准没有指定使用的算法,尽管C++ 11具有指定一些流行算法的工具),运行一个对这些数字进行数学运算,并返回结果.因此,如果种子状态每次都相同(如果您不使用真正的随机数调用srand),那么您将始终获得相同的"随机"数字.
如果您想了解更多信息,可以阅读以下内容:
http://www.dreamincode.net/forums/topic/24225-random-number-generation-102/
http://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/
| 归档时间: |
|
| 查看次数: |
100536 次 |
| 最近记录: |