zoukankan      html  css  js  c++  java
  • 抽奖程序的实现

    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 ",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_最小值;
    }

  • 相关阅读:
    阿里云ECS磁盘性能测试
    阿里云NAS性能测试
    Jumpserver堡垒机容器化部署
    k8s集群中部署RookCeph高可用集群
    使用GitHub Action进行打包并自动推送至OSS
    MYSQL ERROR 1118
    ORACLE cursor_sharing参数导致函数索引失效
    导出微信视频号的视频
    iPad作为扩展屏的几种方案
    AR VR MR XR
  • 原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/8910280.html
Copyright © 2011-2022 走看看