精华内容
下载资源
问答
  • C++中获得一个随机数

    2021-03-16 23:21:18
    #include srand((unsigned int)time(NULL)); //添加随机数种子 int a=rand()%100; //a是一个0~99的int类随机数

    #include

    srand((unsigned int)time(NULL)); //添加随机数种子
    int a=rand()%100; //a是一个0~99的int类随机数

    展开全文
  • Java如何获得一个随机数

    千次阅读 2014-04-30 10:25:50
     ...在Java中,随机数的概念从广义上将,有三种。...1、通过System.currentTimeMillis()来获取...3、通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。   函数说明: 1、random() 从0.
    
    在Java中,随机数的概念从广义上将,有三种。
    1、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。
    2、通过Math.random()返回一个0到1之间的double值。
    3、通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。

     

    函数说明:
    1、random() 从0.0到1.0之间可以生成一个双精度浮点数
    2、round() 四舍五入
    3、floor() 小于参数的最大整数,例如floor(4.8) = 4
    4、ceil() 大于参数的最小整数,例如celi(4.4) = 5
     
     
     
     
     

    Math.random()获取的是0~1之间的double型随机数,不包括1

     

    如果想获取0~9的随机整数(int)(Math.random()*10)

    如果想获取1~10的随机整数(int)(Math.random()*10 + 1)

     

    /**
    * @param args
    * 使用Random类中的方法
    */
    public static void main(String[] args)

    {
         Random r=new Random();      //实例化一个Random类
         System.out.println("随机产生一个整数:"+r.nextInt());    //随机产生一个整数
         System.out.println("随机产生一个大于等于0小于10的整数:"+r.nextInt(10));    //随机产生一个大于等于0小于10的整数
         System.out.println("随机产生一个布尔型的值:"+r.nextBoolean());     //随机产生一个布尔型的值
         System.out.println("随机产生一个双精度型的值:"+r.nextDouble());    //随机产生一个双精度型的值
         System.out.println("随机产生一个浮点型的值:"+r.nextFloat());     //随机产生一个浮点型的值
         System.out.println("随机产生一个概率密度为高斯分布的双精度值:"+r.nextGaussian());    //随机产生一个概率密度为高斯分布的双精度值
    }

    国泰民安
    展开全文
  • 例如我想获得从 min<= digit<=max的一个随机数。 获取方法如下 Math.random()*(max-min+1)+min

    例如我想获得从 min<= digit<=max的一个随机数。

    获取方法如下

    Math.random()*(max-min+1)+min

     

    展开全文
  • 给设备设置MAC地址,需要每台设备MAC地址不同,怎么才能得到随机数? 【除了和时间关联,因为没有时钟芯片,取的时间总是相同,所以用rand产生的随机数也相同。】
  • 一个特例:已知一个随机数生成函数f3(),即...计算机中所有的数都是由二进制表示,所以如果能得到一个函数f2(),以50%的概率得到0或者1,那就可以通过这个函数来生成任何一个随机数产生器了。  f2(){int a; while((a =

    一个特例:已知一个随机数生成函数f3(),即以相同的概率随机返回0, 1, 2(返回每个数的概率均为1/3),现要求通过调用f3()实现一个函数f5()。

    解答方法: 
    (1)最基本的思路: 
    计算机中所有的数都是由二进制表示,所以如果能得到一个函数f2(),以50%的概率得到0或者1,那就可以通过这个函数来生成任何一个随机数产生器了。 
    f2(){int a; while((a = f3()) > 1); return a;} 
    然后f5()就能通过f2()实现。

    (2)一次简单扩展: 
    既然任何一个数能用二进制表示,那也能用三进制表示,f3()就是一个生产三进制各位数字的函数,所以可以通过f3()直接得到f5()。伪代码:

    int f5() {
        int a;
        do {
            a = 3 * f3() + f3();
        }while(a > 4);
        return a;
    }

    因为a的范围是[0, 8],且概率相等,当a>4的时候,重新调用两次f3(),所以最后返回的是[0, 4],且概率相等。

    (3)两种方法调用f3()函数次数的期望: 
    方法(2)中一次求得a处于[0, 4]的概率是5/9,每次调用两次f3(),所以期望是2/(5/9) = 18/5 = 3.6次; 
    方法(1)中a = 4 * f2() + 2 * f2() + f2(),a取值为[0, 7],所以生成一个随机数调用f2()的次数为3/(5/8) = 24/5,而f2()每次只需调用一次f3(),最终的期望也是24/5 = 4.8次,不如方法(2)好。

    (4)方法(2)每次成功概率只有5/9,实在是太低。改进一下,每次调用三遍f3(),即a = 9 * f3() + 3 * f3() + f3(),这样,a的取值范围是[0, 26],去除25,26两个值之后对5取模,伪代码:

    int f5() {
        int a;
        do {
            a = 9 * f3() + 3 * f3() + f3();
        }while(a > 24);
        return a % 5;
    }

    期望是多少呢?容易计算为:3/(25/27) = 81/25 = 3.24次,比方法(2)还要好。

    (5)方法(4)是不是最好的呢?如果每次再增加调用f3()的次数能使得一次成功吗?答案是否定的,因为3^n = (5 - 2)^n,即3的幂次方一定不能被5整除,所以一定有浪费。但是可以换一种思路,把方法(1)与方法(2)结合,先列伪代码:

    int f5() {
        int a;
        do {
            a = 3 * f3() + f3();
            if(a > 4)
                a += 9 * f3();
        }while(a > 24);
        return a % 5;
    }

    先证明结果正确性,即返回值为[0, 4],且等概率。由最后return语句知,返回值一定是在[0, 4];那概率是否相等呢?首先,do-while语句里a的值有三种情况,第一种是[0, 4],第二种是[5, 8]、[14, 17]、[23, 24],第三种是[25, 26],其中第三种是需要抛弃的。仔细分析,a落入第一种情况的概率是5/9,且每个取值等概率,落入第二种情况的概率是(4/9) * (10 / 12) = 10/27,得到每个数的概率都是1 / 27,而每个数模5的余数分别为:0,1,2,3,4,0,1,2,3,4,所以在第二种情况下,返回[0, 4]也是等概率的。

    (6)方法(5)的期望呢? 
    首先,最外层do-while循环一次成功的概率是25/27;循环体内部if语句执行的概率是4/9,所以循环体内部的执行次数的期望是2+4/9 = 22/9,返回一次随机数f3()执行次数的期望是(22/9) / (25/27) = 66/25 = 2.64次。

    但是是真的吗?上述分析没有讨论独立性问题,即如果do-while循环体内if语句没有执行,那while判断条件也一定不满足,直接跳出循环。所以应该这样分析:do-while循环体内if语句没有执行的概率为5/9,执行if语句且跳出循环的概率是10/27,执行if语句但未跳出循环的概率是2/27,所以采用求解期望的直接公式进行计算,f3()调用的次数为:T3 = 2 * 5/9 + 3 * 10/27 + (2/27) * (5 * 5/9 + 6 * 10/27) + … = 20/9 + 2/27 * (3 + 20/9) + … + (2/27)^i * (3 * i + 20/9) + … = 2.6592。

    比斜体字中计算的多的原因是,一旦没有跳出while循环,次数应该加3而非22/9。

    最后的分析如有不对之处,请不吝指出。

    (7) 若已知fn()而求fm()呢? 
    分两种情况考虑:1)m<=n,即调用一次fn(),得到的范围超过了m,那一次成功的概率为m/n,期望为n/m;2)m>n,即调用一次fn(),得到的范围还不足够m,所以必须多次调用,假设调用k次,那么n^k >= m,这样一次循环成功的概率是m/n^k,期望是n^k / m,另外,k >= log(n)m,进行上取整,调用fn()的次数期望是k * n^k / m。 
    注意到,当m<=n时,k恰好等于1,所以两种情况可以统一了。

    (8)对7的一步优化: 
    方法(7)中,在调用了k次fn()之后,假设得到的值是x(范围是[0, n^k - 1]),直接将x>m的情况舍弃掉了;实际上有更高效点的利用方法,借鉴方法(5),将x取值范围按m进行分组,只需舍弃最后的不足m个数的那组即可。所以一次循环成功的概率变为了(X - X %m) / X,其中X = n^k,期望也就变成了kX/(X - X%m)。显然,n > m的时候同样成立,k取1即可。

    附:

    这个其实和算法导论上的一个题很像:已知random等概率返回0或者1,那么试写一个函数等概率返回[a,b]之间的整数。思路就是2进制表示[0, b-a]之间的数,先计算出至少需要多少位,按位生成一个二进制数,一旦大于b-a就重新生成。放到这里的话,表示成5进制就可以了~
    推广一下:对于等概率可以生成k个连续整数函数的函数randomk,设计生成[a,b]之间的整数的算法:
    令n = b - a;则等概率生成[0,n]上的一个整数即可。于是用k进制表示生成的整数,m=ceil(logk(n+1)); 向上取整,如4,log2(5) 向上取整,应该用3个二进制表示. .

    转载自:https://blog.csdn.net/yiqiangeliyou/article/details/46823595

    http://www.cnblogs.com/youxin/p/3351213.html

    展开全文
  • #include using namespace std; int rand6(){ return rand()%6+1; } int rand7(){ int i = (rand6()-1)*6+rand6()-1;... while(i > 34)i = (rand6()-1)*6+rand6()-1;... 不然会增加了获得1的概率 return i%7
  • 用C++生成一个随机数

    2020-10-11 20:39:39
    用C++生成一个随机数 文章目录用C++生成一个随机数C++语言生成随机数的办法通用公式 :例 (例中的随机数生成公式为通用公式) C++语言生成随机数的办法 1.使用rand()函数返回从[0,MAX)之见的随机整数,这里的MAX由所...
  • 一个随机数的类c++

    2021-01-03 15:46:19
    一个随机数的类 这是一个生成随机数的类。是在码农有道c语言技术网c++中容器章节下的一道习题,这也是我第一次发表的文章,如有不当之处,敢情斧正。 下面展示代码。 #include <string> // string需要的...
  • JAVA的一个随机数产生模块 自己最近写的一个
  • js应该如何获取一个随机数

    千次阅读 2019-05-20 10:33:02
    这里是修真院前端小课堂,每篇...【js应该如何获取一个随机数 】 1.背景介绍 随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串、数字。 或者像js-task1中一样随机选择一个盒子,随机一个颜色等等...
  • Android studio 获取一个随机数

    千次阅读 2020-04-14 22:59:36
    获取一个随机数, 取值在 min--max 之间包括 min 和 max public static int random(int min, int max) { if (min > max) { return (int) (max + (min - max + 1) * Math.random()); } return (int) (min + (m....
  • 利用rand()函数来返回一个一随机数值,范围在0至...此时产生的是一个伪随机数值,在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。 利...
  • import java.util.Random; public class Kehouti444 { public static void main(String[] args) { //1:创建随机数对象 Random r = new Random(); int e = r.nextInt(100); ...
  • 有以下函数: ``` //Function to get ...如果在运行时使用调试器单步执行该循环,则会得到不同的值(这正是我想要的)。 但是,如果将断点放在该代码之下两行,则“ mac”数组的所有成员的值都相等。 为什么会这样?
  • 如何获取一个随机数

    2020-03-31 21:20:49
    java.lang.Math类中的静态方法 double value = Math.random(); //value >= 0 && value < 1.0 公式: [a,b] (int) (Math.random() * (b - a + 1) + ...随机产生一个数,举例如下: import java.util.Ra...
  • 首先,需要导入random模块:import random随机取1-33之间的1个随机数,可能重复:random.choice(range(1,34))print得到一系列随机数,执行一次得到一个随机数:print(random.choice(range(1,34)))随机取1-33之间的6个...
  • 最近做了一些Tencent及几家公司的面试题,发现有一种关于产生随机数的类型的题目。... 利用随机函数rand()函数生成一个等概率随机生成整数1到5的函数Rand5(),然后根据Rand5()生成Rand7(),代码如下: #i...
  • 今天之间我运行某个程序得到随机数都是同一个,但到了第二天刷新得到了又是一个新的随机数,但是当天是不会变的。 比如: 今天2016-12-29得到的是5,在2016-12-29那天访问都是5; 明天2016-12-30得到的是2,在2016-...
  • 这里用到了Math.random()和Math.abs(),分别用于获得随机数和绝对值 ... * @Description:输出某两个整数之间的一个随机数 * @Date: 2019/5/23 * @Param: [m, n] * @return: void **/ public static voi...
  • link中如何得知一个随机数是从哪个种子获得的?
  • 用Random产生1到10之间的一个随机数

    千次阅读 2019-09-23 07:11:23
    bat中怎样用Random产生1到10之间的一个随机数? 当然是用%random%,示例: @echo off rem 用Random产生1到10之间的...获得一定范围内的随机数,用%random%可以产生0到32767之间的随机数,但是,如何才能得到一...
  • 写在前面: 很早之前在简书写过几篇关于随机数的文章之前写的很乱,现在重新整理一下...通常我们生成随机数都是使用这个方法,这个方法返回值是一个伪随机选择的数,该值大于等于0.0且小于1.0,即取值范围是[0.0,1...
  • 如何产生一个随机数

    千次阅读 2007-07-31 17:10:00
    大家可能很多次讨论过随机数在计算机中怎样产生的问题,在这篇文章中,我会对这问题进行更深入的探讨,阐述我对这问题的理解。首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,416
精华内容 65,766
关键字:

获得一个随机数