zoukankan      html  css  js  c++  java
  • 0 .. n1个数中随机选m个数

    给定一个n, 一个m, 要求从0..n-1个数中随机选取m个数。

    这里参考《编程珠玑》中的一个方法,既利用概率测试来进行选取。假设我们要从0到100中选取10个数。首先考虑0,我们选取它的概率为10/100 = 1/10,因此我们可以产生一个随机数(应该远远大于n),利用该数模100的值是否小于10来模拟选取0的情况。接着考虑1,这时我们应该根据0是否被选取来考虑其被选中的概率。

    给出代码,补充了书中的bigrand的实现以及循环做了一点点改动。

     1 #include<stdio.h>
    2 #include<stdlib.h>
    3 #include<time.h>
    4
    5 int range_num;
    6
    7 unsigned int bigrand(void){
    8 srand(time(NULL));
    9 return (unsigned int)(100 * range_num * rand());
    10 }
    11
    12 int main(void){
    13 int m = 10, n = 1000;
    14 int i, remaining = n, select = m;
    15
    16 range_num = n;
    17
    18 for(i = 0;i < n && select > 0;i++){
    19 if(bigrand() % remaining < select){
    20 select --;
    21 printf("%d ",i);
    22 }
    23 remaining--;
    24 }
    25
    26 printf("\n");
    27 return 0;
    28 }
  • 相关阅读:
    SQL SERVER 随笔知识点
    c# 异步之async/await ,Task
    c# 委托探究
    JS项整理
    C#功能块代码
    Core HostBuilder构建管道,报错提示"Value cannot be null”
    解析Swagge.Json生成Word文档
    C# Http
    C# 责任链模式
    C# 单例模式
  • 原文地址:https://www.cnblogs.com/aLittleBitCool/p/2316388.html
Copyright © 2011-2022 走看看