抽奖程序的实现
Posted 随意就好欧巴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽奖程序的实现相关的知识,希望对你有一定的参考价值。
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_最小值;
}
以上是关于抽奖程序的实现的主要内容,如果未能解决你的问题,请参考以下文章