• 实现随机抽样【随机数生成问题】


    参考资料:C语言函数库

    1、rand()

    定义:

             int rand(void);

    返回值:返回一个伪随机数,该数的范围是:[0,RAND_MAX)

    2、srand()

    定义:

         void srand(unsigned int seed);

    返回值:该函数是随机数发生器的初始化函数;如果使用相同的种子给rand用,那么rand()会产生相同的伪随机数。常用的用法如下:

    (1) srand((unsigned)time(&t));(2) srand((unsigned)time(NULL));这两个都是用当前时间去初始化种子;

    (3) srand((int)getpid());使用程序的PID来作种子,那么在这个程序运行时种子固定那个。

    3、实战经验

    (1)使用math.h中的函数floor时报如下错误,经查是没有指定链接库。使用gcc -o randint randint.c -lm即可

    相关讨论:点击打开链接


    (2)采用下面这个例子,生成随机数,如果个数多了,偶尔会有重复的值

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define NUMBER_MAX 100
    
    int main(int argc,char* argv[])
    {
        int num[NUMBER_MAX];
        int i;
        FILE *rand_num_file = fopen("rand_num_file.txt","w+");
        srand((unsigned)time(NULL));
        for( i=0; i<100; i++)
        {
            num[i] = rand()%900 + 100;
            fprintf(rand_num_file,"%d
    ",num[i]);
        }
    
        return 0;
    }
    

    (3)Makefile的学习刻不容缓,十一之后来了主攻《git权威指南》和《shell编程学习指南》

    (4)按照网上的一种解法,实现randint和bigrand:用rand实现bigrand和randint

    仍然会有重复的数值,那么我们怎么解决这个问题呢?我们要的是100~999之间的任意100个随机数,要求不能重复!

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    
    #define NUMBER_MAX 100
    
    int randint(int l, int u);
    
    int main(int argc,char* argv[])
    {
        int num[NUMBER_MAX];
        int i;
        FILE *rand_num_file = fopen("rand_num_file.txt","w+");
        srand((unsigned)time(NULL));
        for( i=0; i<100; i++)
        {
            //num[i] = rand()%900 + 100;//生成[100,999)之间的随机数
            num[i] = randint(100,1000);
            fprintf(rand_num_file,"%d
    ",num[i]);
        }
    
        return 0;
    }
    
    //实现randint(l,u),返回[l,u]范围内的一个随机整数
    int randint(int l,int u)
    {
        int temp;
        temp = floor(l + (1.0*rand()/RAND_MAX)*(u - l + 1 ));
        return temp;
    }
    
    



    补上:

    今天看到用java语言生成随机数,有这么一个想法,也能满足我们的要求:生成[n,m]之间的k个不重复的随机数。参见:点击打开链接


  • 相关阅读:
    [LOJ#6284.数列分块入门8] ODT(珂朵莉树)解法
    [CF Contest] Sum of Round Numbers 题解
    基础数论记录
    [CF Contest] Kana and Dragon Quest game 题解
    hexo上怎么写博客
    keepalived的部署
    python局部和全局变量
    python发送邮件
    lamp架构的部署
    rayns数据同步
  • 原文地址:https://www.cnblogs.com/javaadu/p/11742680.html
Copyright © 2020-2023  润新知