概述
今天在运行一个带有rand()的程序的时候,想打印一下它的值,发现每一次打印都是41,第一个数
原来rand()是计算机内的一个生成伪随机数的,生成的其实并不是随机数,而是具有一定规律的递推出来的数。
要在rand()前面加上sand(time(0)),不要忘记加上头文件time.h,
sand(time(0))不能放在循环里面写
如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理
每产生一个随机数之前,都调用一次srand,而由于计算机运行很快,所以你每次用time得到的时间都是一样的(time的时间精度较低,只有55ms)。这样相当于使用同一个种子产生随机序列,所以产生的随机数总是相同的。应该把srand放在循环外
po上蓝桥夺冠概率的代码
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{
/*
甲 乙 丙 丁
甲 - 0.1 0.3 0.5
乙 0.9 - 0.7 0.4
丙 0.7 0.3 - 0.2
丁 0.5 0.6 0.8 -
*/
int randf;
long long int win=0;
srand(time(0));
for(int i=1;i<=100000;i++)
{
randf=rand();
if(randf%3==0)//ab
{
if(randf%10<1){//a win b
if(randf%10<2){//c win d
if(randf%10<3)win++;
}
else{//d win c
if(randf%10<5)win++;
}
}
}
else if(randf%3==1)//ac
{
if(randf%10<3)//a win c
{
if(randf%10<4)//b win d
{
if(randf%10<1)win++;
}
else//d win b
{
if(randf%10<5)win++;
}
}
}
else //ad
{
if(randf%10<5)//a win d
{
if(randf%10<3)//c win b
{
if(randf%10<3)win++;
}
else//b win c
{
if(randf%10<1)win++;
}
}
}
}
printf("%fn",win/100000.0);
return 0;
}
最后
以上就是健康眼神为你收集整理的rand()为啥每次生成的数都是一样的的全部内容,希望文章能够帮你解决rand()为啥每次生成的数都是一样的所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复