精华内容
下载资源
问答
  • rand生成随机数

    千次阅读 2011-05-31 16:03:00
    C++生成随机数

    转自:http://blog.csdn.net/wwwsssaaachaoge/archive/2009/12/13/4949867.aspx

          在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是 一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机 数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形 是void srand( int a)。

           可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。

          rand ()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定 义的变量类型,int整形的话就是32767。 在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语 句来设置种子的个数。具体见下面的例子。

    一 如何产生不可预见的随机序列呢
    利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

           在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:

    1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

    2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

    3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

    4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
          下面是0~32767之间的随机数程序:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>           //使用当前时钟做种子

    void main( void )
    {int i;
    srand( (unsigned)time( NULL ) );          //初始化随机数
         for( i = 0; i < 10;i++ )                          //打印出10个随机数
              printf( " %d/n", rand() );
    }

       根据上面的程序可以很容易得到0~1之间的随机数:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    main( )
    {int i;
    srand( (unsigned)time( NULL ) );
           for( i = 0; i < 10;i++ )
                printf( "%5.2f/n", rand()/32767.0);
    }

         而产生1~100之间的随机数可以这样写:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    main( )
    {int i;
    srand( (unsigned)time( NULL ) );
           for( i = 0; i < 10;i++ )
                printf( "%d/n", rand()%100+1);
    }


    二,三个通用的随机数发生器,推荐用第三个
    函数名: rand
    功 能: 随机数发生器
    用 法: void rand(void);
    程序例:

    #include <stdlib.h>
    #include <stdio.h>

    int main(void)
    {
       int i;

       printf("Ten random numbers from 0 to 99/n/n");
       for(i=0; i<10; i++)
          printf("%d/n", rand() % 100);
       return 0;
    }


    函数名: random
    功 能: 随机数发生器
    用 法: int random(int num);
    程序例:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    /* prints a random number in the range 0 to 99 */
    int main(void)
    {
       randomize();
       printf("Random number in the 0-99 range: %d/n", random (100));
       return 0;
    }

    函数名: randomize     这个比较好!
    功 能: 初始化随机数发生器
    用 法: void randomize(void);
    程序例:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    int main(void)
    {
       int i;

       randomize();
       printf("Ten random numbers from 0 to 99/n/n");
       for(i=0; i<10; i++)
           printf("%d/n", rand() % 100);
       return 0;
    }

    在《计算机常用算法》中有介绍随机数的生成算法

    三 如何产生设定范围内的随机数  

    由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?

        从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:

        k=rand()%(Y-X+1)+X;

        这样,就可以产生你想要的任何范围内的随机数了。

    四,产生不重复的随机数
    1) #include <stdlib.h>
    #include <stdio.h>
    #include<stdio.h>
    #include <time.h>
    swap(int *pm,int *pn)      /*必须用指针进行交换*/
    {
       int temp;
       temp=*pm;
       *pm=*pn;
       *pn=temp;
    }

    int main(void)
    {
    int   i,a[513];
    /*int *pa,*pb;*/
    srand( (unsigned)time( NULL ) ); /*定义这个可以产生不同的随机数*/
    for(i=1;   i<=512;   i++){a[i]=i;printf("%4d",a[i]);}
    for(i=512;   i>=1;   i--)
    {
    /* pa=&a[i]; pb=&a[rand()%i+1];*/
    swap(&a[i], &a[rand()%i+1]);     /*加一是从一到i的随机,就不会包含0*/
    /*不用再定义指针,这样结论是一样的*/
    }
       printf("/n") ;
    for(i=1;   i<=64;   i++)
       printf("%4d",a[i] );
    getch();   /*wintc的输出*/
    }

    2)
    #include <stdlib.h>
    #include <stdio.h>
    #include<stdio.h>


    int main(void)
    {
       int a[100]={0}; int i,m;
        for(i=1;   i<=99;   ++i)
         printf("%4d",a[i] );

    srand( (unsigned)time( NULL ) );

    for(i=1; i<=99; i++)
    {
            while(a[m=rand()%100+1]);
            a[m] = i;
    }
           for(i=1;   i<=99;   ++i)
         printf("%4d",a[i] );

    getch();
    }

    展开全文
  • [c++] rand 生成随机数

    2021-06-07 15:36:28
    1、C++标准函数库提供一随机数生成rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是**以相同的种子开始**,所以...

    ** 数组中随机选取k个元素 **

    for(int i =0; i<k; i++){
    	cout<<nums[rand()%MAX]<<endl // MAX为nums.length,其随机域为0~MAX-1
    }
    

    一、random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。 可改用C++下的rand函数来实现。
    1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)
    2、C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。
    3、 比较理想的是 用变化的数,比如时间来作为随机数生成器的种子 。 time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。

         // C++随机函数(VC program) 
    #include <stdlib.h> 
    #include <iostream.h> 
    #include <time.h> 
    #define MAX 100 
    void main()
    { 
        srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子 
       for (int i=0;i<10;i++) 
           cout<<rand()%MAX<<endl;//MAX为最大值,其随机域为0~MAX-1
    } 
    

    二、rand()的用法

    rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。 这样,如果你要产生0~10的10个整数,可以表达为:

    int N = rand() % 11; 
    
     这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样:
    
    int N = 1 + rand() % 10;
    

    总结来说,可以表示为:

    a + rand() % n 
    

    其中的a是起始值,n是整数的范围。 若要01的小数,则可以先取得010的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依此类推。
    通常rand()产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand( seed )函数进行随机化,随着seed的不同,就能够产生不同的随机数。
    如大家所说,还可以包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。

    注:rand()产生的是0 to RAND_MAX (32767)上的随机数,而32767不能被11整除。

    三、按要求设置概率

    比如要设置一个10%的概率问题,我们可以采取rand()函数来实现,在if条件句判断里,用rand()得到的值%一个设定的值,再与另一个值做“==”运算。

    例如:

    if1==rand()%10{ //10%的概率达成,这里编辑余下代码}
    else
    { //90%的概率没达成,这里编辑余下代码}
    
    展开全文
  • 采用rand生成随机数方法

    千次阅读 2017-08-13 17:51:11
    我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而...

    我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。


    1.rand()

    功能:随机数发生器

    用法:int rand(void)

    所在头文件: stdlib.h

    rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。

    rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。

    用户未设定随机数种子时,系统默认的随机数种子为1。

    rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。

    2.srand()

    功能:初始化随机数发生器

    用法: void srand(unsigned int seed)

    所在头文件: stdlib.h

    srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

    3.使用当前时钟作为随机数种子

    rand()产生的随机数在每次运行的时候都是与上一次相同的。若要不同,用函数srand()初始化它。可以利用srand((unsigned int)(time(NULL))的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。

    #include <iostream>
    #include <iomanip>
    #include <time.h>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	//设置种子,不然rand()是个伪随机数
    	srand(time(NULL));
    
    	//生成指定范围内的随机数
    	//[a,b],(rand() % (b-a+1)) + a
    	//[a,b),(rand() % (b-a)) + a
    	//(a,b)
    	//(a,b],(rand() % (b-a)) + a + 1
    
    	int nStart = 10;
    	int nEnd = 100;
    	for ( int i = 0; i < 20; i++ )
    	{
    		cout << nStart + (int)(nEnd - nStart) * rand() / (RAND_MAX + 1) << endl;
    	}
    
    	//生成0~1之间的浮点数,保留小数点后两位
    	for ( int i = 0; i < 20; i++ )
    	{
    		cout << setprecision(2) << rand() /double(RAND_MAX) << endl;
    	}
    
    	return 0;
    }


    展开全文
  • C语言 rand函数生成随机数

    万次阅读 多人点赞 2018-06-14 16:17:43
    在实际的项目中,有时候需要生成一个随机数,在C语言中随机数生成可以通过使用rand函数来实现。 rand函数包含在头文件stdlib.h里,因此使用rand函数需要声明包含stdlib.h。 #include&lt;stdlib.h&gt; ...

    在实际的项目中,有时候需要生成一个随机数,在C语言中随机数的生成可以通过使用rand函数来实现。
    rand函数包含在头文件stdlib.h里,因此使用rand函数需要声明包含stdlib.h。

    #include<stdlib.h>
    #include<stdio.h>
    
    int main(){
    	int i;
    	for(i = 0; i <10;i++){
    		printf("%d\n",rand());
    	}
    	return 0;
    }
    

    但是,这里就出现了一个问题。
    这里写图片描述
    这里写图片描述

    显然,两次产生的随机数是完全相同的。因此可以这样修改

    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
    
    int main(){
    	int i;
    	srand((unsigned) (time(NULL)));
    	for(i = 0; i <10;i++){
    		printf("%d\n",rand());
    	}
    	return 0;
    }
    

    在产生随机数之前调用一下srand就可以了。

    同时,如果限定一下产生随机数的范围的话,可以这样产生10以内的随机数

    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
    
    int main(){
    	int i;
    	srand((unsigned) (time(NULL)));
    	for(i = 0; i <10;i++){
    		printf("%d\n",rand()%10);
    	}
    	return 0;
    }
    

    还可以这样产生5到10之间的随机数

    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
    
    int main(){
    	int i,j;
    	srand((unsigned) (time(NULL)));
    	for(i = 0; i <10;i++){
    		do{
    			j = rand()%10;
    		}while(j < 5 || j >10);
    		printf("%d\n",j);
    	}
    	return 0;
    }
    
    展开全文
  • C语言rand函数生成随机数详解和示例

    千次阅读 2020-04-17 12:28:38
    在C/C++程序开发中,会经常用到随机数这个功能,例如编写游戏类(纸牌)的程序时就需要... 头文件中的 srand和rand 函数来生成随机数。 void srand(unsigned int seed); // 随机数生成器的初始化函数 int rand(); //...
  • rand函数生成随机数

    千次阅读 2018-06-02 10:28:51
    C语言中,rand函数是用来产生随机数,但是并不是真真意义上的随机数,是一个伪随机数,是根据一个种子数产生的,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,...
  • 随机数经常解题需要用到,生成大量的随机数,尤其是,有序的随机数,分享一下生成随机数的简单方法。 所用编译器vc6.0 ①生成一个随机数 #include<ctime> #include<iostream> using namespace std; #...
  • C++中rand()生成随机数

    2016-11-03 09:29:41
    C++中常用rand()函数生成随机数,但严格意义上来讲生成的只是伪随机数(pseudo-random integral number)。生成随机数时需要我们指定一个种子,如果在程序内循环,那么下一次生成随机数时调用上一次的结果作为种子。...
  • C++ 使用rand()函数生成随机数

    千次阅读 2020-10-06 10:54:51
    生成随机数需要rand() 和srand() 一起使用,其中 srand() 用来初始化随机数种子, rand() 用来产生随机数。 rand函数--随机数发生器: 用法:int x=rand(); 可以产生一个0~32767之间的随机数。 生成一定范围的...
  • Qt生成随机数的方法

    万次阅读 多人点赞 2016-04-01 13:42:01
    1.生成随机数 生成随机数主要用到了函数qsrand和qrand,这两个函数在#include &lt;QtGlobal&gt;中,qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand...
  • math/rand包实现了伪随机数生成器。 随机数从资源生成。 包水平的函数都使用的默认的公共资源。 该资源会在程序每次运行时都产生确定的序列。 如果需要每次运行产生不同的序列,应使用Seed函数进行初始化。 默认资源...
  • PHP内部生成随机数的方法相比其他方法简单,不...如果要设置随机数范围,可以在函数中设置 min 和 max 的值。如果需要生成随机数的种子,使用 srand 函数配置。echo rand(); //生成 0~RAND_MAX 之间的随机数,Windo...
  • Matlab内置了五种随机函数:rand生成在(0, 1)之间均匀分布的随机数randn:生成均值为0,方差为1的标准正态分布的随机数randi(imax):生成在[1, imax] 均匀分布的伪随机整数randsrc(m, n, [alphabet; prob]):生成...
  • 在go语言中,生成随机数与其他语言稍有区别,需要我们添加一个随机数种子,否则生成出来的随机数都是同组一数字,实现代码如下 ... //后面是生成随机数范围[0-10},包含0,不包括10 arr[i] = r
  • 随机数生成在算法编程中非常常用,在matlab中rand(random的缩写)家族经常被使用。 小白一枚,敬请大神指教 rand家族成员 randMatrix = rand(x, y) randMatrix = randn(x, y) randMatrix = randi(x, y) randMatrix...
  • 在某一个区间内生成随机数 https://stackoverflow.com/questions/7878287/generate-random-int-value-from-3-to-6 原理,rand函数会...
  • rand产生随机数介绍

    2020-08-11 01:05:36
    可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。...除了random函数,还有一个rand函数,也是一个随机函数,可以产生从0到
  • C++11之前,没有自带的random函数,要生成随机数,普遍采用rand和srand()。 C++11之后,内部提供了强大的随机数库Random。 rand() 其内部实现是用线性同余法做的,生成是可看做一定范围内随机的伪随机数,其最大...
  • 头文件中的 rand() 函数来生成随机数,随机生成一个位于 0 ~ RAND_MAX 之间的整数。它的用法如下: int rand (); 为什么不使用 random() 函数? 具体用例: #include <stdio.h> #include <stdlib.h> ...
  • 随机数生成的问题遇到过几次,由于之前的工作一直没用到随机数,平常没怎么留意,知道有函数可以生成,却没去记住过(平常比较懒,对于库函数都没记过,都是需要用到才去百度查,查了也没研究透,看来太依赖...
  • Python生成随机数和numpy生成随机数

    千次阅读 2019-06-22 09:18:17
    module 'random' has ...1、random.random()随机产生一个随机数,可以使用循环生成更多的数 random.randint()生成整数,uniform生成浮点数,uniform可以有三个参数,开始,结束,个数 2、import numpy as np np....
  • 如果要设置随机数范围,可以在函数中设置 min 和 max 的值。如果需要生成随机数的种子,使用 srand 函数配置。 echo rand(); // 生成 0~RAND_MAX 之间的随机数,Windows 系统下 RAND_MAX 的值为 32767,RAND_MAX ...
  • PHP生成随机数——rand()

    千次阅读 2014-01-06 16:52:07
    rand ... rand — 产生一个随机整数 ...int rand ( void ) ...int rand ( int $min , int $max ) ...如果没有提供可选参数 min 和 max,rand() 返回 ... 5 到 15(包括 5 和 15)之间的随机数,用 
  • c语言中如何生成随机数Here you will get program and learn how to generate random number in C and C++. 在这里,您将获得程序并学习如何在C和C ++中生成随机数 。 We can use rand() function to generate ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,838
精华内容 9,935
关键字:

rand生成随机数的范围