精华内容
下载资源
问答
  • C++中使用Rand()函数来产生“随机数”,实际上还要使用一个名为Srand()的函数产生种子,系统通过种子和随机数产生算法,生成不同的数字。当我们在使用Rand()没有调用Srand()时,系统会自动调用Srand(),...

    C++中使用Rand()函数来产生“随机数”,实际上还要使用一个名为Srand()的函数产生种子,系统通过种子和随机数产生算法,生成不同的数字。当我们在使用Rand()没有调用Srand()时,系统会自动调用Srand(),种子相同时,产生的随机数相同。

    为了能更好的产生随机数,我们通常使用系统时间作为随机数种子。

    // srandTest.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>   //输入输出用到的头文件
    #include <time.h>     //time 用到的头文件
    #include <Windows.h>  //Sleep 用到的头文件
    using namespace	std;
    
    void testRand(void); //函数原型
    void testSrand(void);//函数原型
    int _tmain(int argc, _TCHAR* argv[])
    {
    	cout << "*************testRand**************" << endl;
    	testRand();
    	cout << "\r\n*************testSrand**************" << endl;
    	testSrand();
    	cin.get();//捕获输入种子后的ENTER键
    	cin.get();
    	return 0;
    }
    void testRand()
    {
    	int cinNum, coutNum;
    	for (int i = 0; i < 5; ++i)
    	{
    		cout << "please enter a number as seed:" << endl;
    		cin >> cinNum;
    		srand(cinNum); //将输入的数字作为种子
    		for (int i = 0; i < 5; ++i)
    		{
    			coutNum = rand() % 100; //产生1-100以内的随机数
    			cout << "random number:" << coutNum << endl;
    		}
    	}
    }
    void testSrand()
    {
    	int coutNum;
    	for (int i = 0; i < 5; ++i)
    	{
    		cout << "generate seed by system time" << endl;
    		Sleep(1478); //设置程序休眠时长,若不设置,则由于计算机处理速度过快,系统时间相同,种子相同
    		srand((unsigned)time(NULL));
    
    		for (int i = 0; i < 5; ++i)
    		{
    			coutNum = rand() % 100;
    			cout << "random number:" << coutNum << endl;
    		}
    	}
    }
    
    结果如下



    展开全文
  • 否则,若两次调用时间相差很小,可能出现生成随机数的seed一样的情况,此时就会出现某个随机数连续出现若干次的情况。 转载于:https://my.oschina.net/u/1037903/blog/226730

    FORTRAN中用于产生随机数的子程序有random_seed和random_number,其中random_seed产生seed,random_number根据seed的值产生随机数。当random_seed()的参数为空时,其会给出一个默认的seed值,这意味着每次调用时产生的随机数都是相同的。(这也是有用的,这意味着你每次在执行程序的时候,会获得相同随机数序列,这些便于调试,但是有时候可能会需要每次生成不同的随机数序列以满足程序的要求)。

    下面的方法利用系统时间产生随机数:

          subroutine init_random_seed()
          integer :: i,n,clock
          integer,dimension(:),allocatable :: seed
          call random_seed(size=n)
          allocate(seed(n))
          call system_clock(count=clock)
          seed=clock+37*(/(i-1,i=1,n)/)
          call random_seed(PUT=seed) 
          deallocate(seed)
          end subroutine

    该子程序来源于GNU Fortran:http://gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fSEED.html

    (以上内容转载自:http://blog.sina.com.cn/s/blog_872ecf9f01010kwl.html

    调用通过如下程序可进行调用:

          program randomnum
          implicit real*8(a-h,o-z)
          call init_random_seed()
          call random_number(x)
          write(*,*)x
          end

    注意:在一个程序中只需调用一次子程序 init_random_seed(),特别是在有另一个子程序也需要产生随机数的情况下,仍无需(说是不能或许更为恰当些)再次调用init_random_seed()。否则,若两次调用时间相差很小,可能出现生成的随机数的seed一样的情况,此时就会出现某个随机数连续出现若干次的情况。


    转载于:https://my.oschina.net/u/1037903/blog/226730

    展开全文
  • 在前端开发中,尤其是游戏开发,经常会用到随机数,那么我们会第一时间想到:Math.random,大家略微的看看如下代码: for (var i= 0; i<10; i++) { document.writeln(Math.random() +"<br />"); } 运行...

    在前端开发中,尤其是游戏开发,经常会用到随机数,那么我们会第一时间想到:Math.random,大家略微的看看如下代码:

    for (var i= 0; i<10; i++) { document.writeln(Math.random() +"<br />"); }

    运行如上代码,也确实生成了10个不同的数字,当然你可以生成更多,看起来挺不错的,如果仅仅如此,那么本文就没必要写了。

    试着想一下,如果在某一个场景,我们做一个游戏,用户玩到一半的时候退出了,这样用户下次进来可以选择继续上一次的进度继续玩,那么现在问题来了:用户玩的进度以及用户的积分等简单的描述数据,我们都可以记录下来,但是游戏里绘制的障碍物、飞行物以及很多装饰类的小玩意儿,他们甚至是每次用户点开始随机输出的,要把画布上所有的东西以及它们的大小,位置等都记录下来,实在是没必要。

    于是种子随机数就闪亮登场了,我们如果在画布上元素随机绘制的时候,有一个种子值,页面上所有元素的位置、大小等都是根据这个种子来算的,那么等到第二次绘制的时候只需要传入这个种子,就可以重现之前未完成的画布元素。

    那么这个时候,你会发现JS里面自带的 Math.random 就不好使了,无法满足需求,我们继续看这段代码:

    Math.seed = 5;
    Math.seededRandom = function(max, min) {
        max = max || 1;
        min = min || 0;
    
        Math.seed = (Math.seed * 9301 + 49297) % 233280;
        var rnd = Math.seed / 233280.0;
    
        return Math.ceil( min + rnd * (max - min) );   // Math.ceil实现取整功能,可以根据需要取消取整
     };

    运行如上代码你会发现如果种子 Math.seed 不变,那么生成的随机数是不会变化的,O了,如果引入这个函数,那么重现游戏场景可以实现了,虽然还需要做更多的细节处理,但机制上是能保证的,本文的重点不是实现一个这样的游戏。

    本文的重点是:(Math.seed * 9301 + 49297) % 233280,为什么会是这三个值,而不是其它的到底这三个数字有什么神秘的来历呢?

    像 Math.seededRandom 这种伪随机数生成器叫做线性同余生成器(LCG, Linear Congruential Generator),几乎所有的运行库提供的 rand 都是采用的LCG,形如:

    In+1=aIn+c(mod m)

    生成的伪随机数序列最大周期m,范围在 0 到 m-1 之间。要达到这个最大周期,必须满足:

    1. c与m互质
    2. a - 1可以被m的所有质因数整除
    3. 如果m是4的倍数,a - 1也必须是4的倍数

    以上三条被称为Hull-Dobell定理。作为一个伪随机数生成器,周期不够大是不好意思混的,所以这是要求之一。因此才有了:a=9301, c = 49297, m = 233280这组参数,以上三条全部满足。

    展开全文
  • Java生成随机数

    2019-10-04 12:43:57
    1、Java生成随机数 1 public static void main(String[] args) { 2 Random random = new Random(); //根据当前系统的时间作为随机数种子,创建一个随机数生成器 3 4 System.out.println(random.nextInt(10...

    1、Java生成随机数

    1 public static void main(String[] args) {
    2         Random random = new Random();        //根据当前系统的时间作为随机数种子,创建一个随机数生成器
    3         
    4         System.out.println(random.nextInt(10));            //生成一个0~9的随机数,并输出
    5 }

    由于随机数种子的设置,每次程序运行而产生的随机数不一定相同。

     

    2、生成伪随机数

    1 public static void main(String[] args) {
    2         Random random = new Random(3);        //将3作为随机数种子,创建一个随机数生成器
    3         
    4         System.out.println(random.nextInt(10));            //生成一个0~9的随机数,并输出
    5     }

    运行程序,每次得到的随机数都是相同的。

     

    转载于:https://www.cnblogs.com/acode/p/5518834.html

    展开全文
  • javascript根据时间生成m位随机数,最大13位随机数,并且不能保证首位不为0,实现代码如下,需要的朋友可以参考下
  • delphi生成随机数

    2012-06-18 10:38:34
    我的思想就是先定义一个用来存放的数组(这当然是必须的啦,废话),然后定义了一个二维数组(感觉很浪费空间),这个二维数组是用来存放已经生成随机数的范围,当然不是随意存放了,要按照自然顺序,但这还不必要...
  • 每个种子对应一组根据算法预先生成随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到...
  • java生成随机数例子

    2018-10-15 10:29:12
    * @Description: 根据当前时间获取随机数:当前时间+5位随机数 * @return String 返回类型 * @date 2017年7月13日 上午9:16:14 * @throws */ public static String getDateAddFiveRand...
  • public static void main(String[] args) { SimpleDateFormat dmDate = new SimpleDateFormat(... // 获取当前时间 Random random = new Random(); // 定义随机数 int ran = random.nextInt(1000000); ...
  • Java生成随机数的三种方法: 1、Random random = new Random();//根据当前系统的时间作为随机数种子,创建一个随机数生成器 System.out.println(random.nextInt(10));//生成一个0~9的随机数,并输出 由于随机数...
  • 今日头条面试题:生成随机数(根据rand5()生成rand7())

    千次阅读 多人点赞 2018-04-04 00:00:00
    题目描述给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即,使用函数rand5()来实现函数rand7())。思路rand5可以随机生成1,2,3,4,5;rand7可以随机生成1,2,3,4,5,6,7。 rand5并不能直接
  • 使用STM32生成随机数的方法

    万次阅读 2018-07-20 21:09:14
    rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。 如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。 srand(unsigned se...
  • /* 生成随机数(其二:根据当前时间设定随机数的种子)*/ #include <time.h> #include <stdio.h> #include <stdlib.h> int main(void) { int retry; /* 再运行一次? */ srand...
  • Random短时间重复生成相同随机数

    千次阅读 2019-04-08 10:00:17
    起因:使用Random短时间循环获取随机数,导致生成随机数相同 var num=new Random().Next(1,10000); 根据Random源码可以看出,在相同毫秒内得到的随机数是一样的,这样就无法达到随机效果. 然后发现在源码中...
  • 今天做测试,在一个循环里面给实体属性赋随机...它的构造函数有两种,一个是直接New Random(),另外一个是New Random(Int32),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者可以自己设定触发的种...
  • 头文件: #include&lt;stdlib.h&gt; #include&lt;time.h&gt; 主程序: srand((unsigned)time(NULL)); int randNumber1 = rand();...//取0~9范围内的随机数 程序运行结果: ...
  •  * 获取当前时间 yyyyMMddHHmmss  * @return String  */  public static String getCurrTime() {  Date now = new Date();  SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");  ...
  • Java实现生成随机数有三种方法: 1、通过 System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字 2、通过 Math.random()返回一个 [0,1) 之间的 doublle型 3、通过 Random类产生一个随机数,...
  • C#生成随机数100次都是一样的数

    千次阅读 2018-04-02 11:09:19
    转载地址:https://www.cnblogs.com/TouchAfflatus/p/3784225.htmlc# Random快速连续产生相同随机数的解决...前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者可以自己设定触发的种子,一般都是...
  • 如题:定义一个整形数组,长度不限,值不限,要求用随机数取出来并打印,值不能取重复的,用最少循环次数解决刚开始看到的时候就分析了下: 1、数组长度不限,值不限,可能有重复值 2、随机数有一样的值,根据下标...
  • Unity3d随机数生成

    2020-11-17 10:55:55
    random在生成随机数的时候是根据初始的时候随机数生成器生成的随机数序列进行生成的,默认情况下这个随机数序列是根据一个默认的种子进行生成的,每次生成的时候这个默认种子会发生改变,所以每次程序运行时生成的...
  • postgres删除重复数据 sql语句: delete from table where ctid not in ...table是数据表表名, tableColumn是判断数据是否重复的关键列,根据情况替换; ctid是postgres中的关键字,不可替换。 可以将min(ct...
  • 随机数生成

    2010-11-22 14:33:00
    然后随机数rand()根据这个种子产生,如果不写srand(),默认值为srand(1),也就是为rand()提供为1的 种子,如果要产生随机数,那么每次产生的种子必须不相同,这个时候我们就可以用流逝的时间作为种子,srand((unsigned...
  • String orderNo = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())+(int)((Math.random() * 9.0D + 1.0D) * 100000.0D);
  • C#产生随机数之一 生成随机数

    万次阅读 2017-03-02 11:51:35
    Random类是一个产生伪随机数字的类,它的构造函数有两种,一个是直接New Random(),另外一个是New Random(Int32 Seed),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者可以自己设定触发的种子。...
  • 例如,可以根据随机键值“排序”,以打乱一个数组。一种方法就是使用选择排序算法,然后把找到最小值的位置改成选择一个随机位置。该结果是一个打乱算法,其中各种可能的输出是等概率的。 编写一个程序,通过随机...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 423
精华内容 169
关键字:

根据时间生成随机数