码迷,mamicode.com
首页 > 其他好文 > 详细

抽奖程序的实现

时间:2018-04-23 00:17:16      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:响应时间   方法   结合   random   硬件   变量   封装   速度   and   

rand    伪随机数 
srand  种子
时钟

rand()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况如法炮制!


随机50-55

第一个数:55-50+1=6
rand()%6+50

大部分程序和语言中的随机数,确实都只是伪随机。是由可确定的函数,通过一个种子,产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。

直观来想,计算机是一种可确定,可预测的的设备,想通过一行一行的确定的代码自身产生真随机,显然不可能。但是,我们或许可以迂回一下……

实现方法简单说就是软硬结合,或者说,引入系统外的变量(把软件,代码,算法想象成一个封闭的系统)。

一个典型的例子就是 UNIX 内核中的随机数发生器(/dev/random),它在理论上能产生真随机。即这个随机数的生成,独立于生成函数,这时我们说这个产生器是非确定的。

具体来讲,UNIX 维护了一个熵池,不断收集非确定性的设备事件,即机器运行环境中产生的硬件噪音来作为种子。

比如说:时钟,IO 请求的响应时间,特定硬件中断的时间间隔,键盘敲击速度,鼠标位置变化,甚至周围的电磁波等等……直观地说,你每按一次键盘,动一下鼠标,邻居家 wifi 信号强度变化,磁盘写入速度,等等信号,都可能被用来生成随机数。


所以,结论是,程序和算法本身不能产生真随机,但是计算机系统作为整体可以迂回产生统计意义上的真随机。
 
 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main(){
int l_v1;
for(size_t i=0;i<10;i++)
{
l_v1=rand();
printf("l_v1 is%d\n",l_v1);
}
system("pause");
}
//我自己封装的函数
int 去时间戳() {
time_t l_now;
time(&l_now);
return(int)l_now;
}
void 置随机数种子(int p_v1){
srand(p_v1);
}
int 取随机种子(int p_最小值,int p_最大值){
return rand() % (p_最大值-p_最小值+1)+p_最小值;
}

 

 

 

 

抽奖程序的实现

标签:响应时间   方法   结合   random   硬件   变量   封装   速度   and   

原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/8910280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!