生成一定数量的不重复随机数

/*
    * array unique_rand( int $min, int $max, int $num )
    * 生成一定数量的不重复随机数
    * $min 和 $max: 指定随机数的范围
    * $num: 指定生成数量
    * 说明:
        生成随机数时用了 mt_rand() 函数。这个函数生成随机数的平均速度要比 rand() 快四倍。
        去除数组中的重复值时用了“翻翻法”,就是用 array_flip() 把数组的 key 和 value 交换两次。这种做法比用 array_unique() 快得多。
        返回数组前,先使用 shuffle() 为数组赋予新的键名,保证键名是 0-n 连续的数字。
        若不进行此步骤,可能在删除重复值时造成键名不连续,不利于遍历。
    */
    function unique_rand($min, $max, $num) {
        $count = 0;
        $return = array();
        while ($count < $num) {
            $return[] = mt_rand($min, $max);
            $return = array_flip(array_flip($return));
            $count = count($return);
        }
        shuffle($return);
        return $return;
    }
  // 测试
    $arr = unique_rand(1111, 9999, 16);
    sort($arr);
    $result = ‘‘;
    for($i=0; $i < count($arr);$i++)
    {
     $result .= $arr[$i].‘,‘;
    }
    $result = substr($result, 0, -1);
    echo $result;
时间: 2024-11-13 08:54:26

生成一定数量的不重复随机数的相关文章

如何用php生成1-10之间的不重复随机数

   今天跟大家分享一个PHP中的案列,大家一起学习学习.                                                        使用shuffle函数生成随机数. 1 2 3 4 5 6 7 8 <?php $arr=range(1,10); shuffle($arr); foreach($arr as $values) {   echo $values." "; } ?> 使用array_unique函数生成随机数. 1 2 3

在一个范围内随机生成指定个数的不重复随机数

public static void setRandom(int min, int max, int n, HashSet<Integer> set) { Random random = new Random(); for (int i = 0; i < n; i++) { int ranInt = random.nextInt(max - min + 1); if(!set.add(ranInt)){ i--; } } }

java中生成不重复随机数(据HashSet特性)

import java.util.HashSet; public class RandomNumbers { /** * 随机指定范围内N个不重复的数 利用HashSet的特征,只能存放不同的值 * * @param min * 指定范围最小值 * @param max * 指定范围最大值 * @param n * 随机数个数 * @param HashSet<Integer> * set 随机数结果集 */ public static void randomSet(int min, int

相邻不重复随机数的生成及优化

生成相邻不重复随机数是之前抽奖插件的遗留问题,在之前的文章中已经简单说过,但没有更好的解决方案.经过一个多月的修改,抽奖插件已经趋于完善,在此分享一下这个问题的解决方法.以下是最初的方法,但是会出现一个单独的全局变量,整体而言稍显多余,不算完美. // 产生相邻不重复的随机数,n 为随机数个数 var b = 0; function random(n) { var a = Math.floor(Math.random() * n); if (a == b) { return random(n);

生成不重复随机数函数

// 生成随机数函数 function createRandom(num,from,to) { var arr=[]; // 随机数数组 var json={}; // 标记json对象 while(arr.length<num) { // 产生单个随机数 var ranNum=Math.round(Math.random()*(to-from))+from; // 通过判断json对象的索引值是否存在 来标记 是否重复 if(!json[ranNum]) { json[ranNum]=1; a

使用C++生成1-33中的6个随机数,无重复

生成1-33中的6个随机数,无重复 ------------------------------------------------------------------------ 方法1.每生成一个随机数,便于前面的所有随机数进行比较,如果有重复,则舍去不要,重新选取. 但该方法十分费时,并且在数据量巨大的并且有一定限制的时候,会引发巨大问题. 例如要生成10000个随机数,范围是0-9999,且不能重复,那么最后几个随机数有可能需要相当长的时间才能筛选出来. 方法2. 下面我们从另外一个角度

Java编程:实现双色球彩票生成器,生成不重复随机数

public static void main(String[] args) {  System.out.print("红色的号码为:");  Set<Integer> set=new HashSet<Integer>();  while (true) {   int i=(int)(Math.random()*33+1);   set.add(i);   if (set.size()>=6) {    break;   }  }  for (Object

mysql生成不重复随机数(unique number generation)

转自:http://blog.csdn.net/dreamer2020/article/details/52049629 问题来源 业务中有时会遇到要生成不重复随机数的情况,例如,新生成一个商品编号.房间编号.或者其他物品编号等.不愿意采用表的自增索引 id,同时又希望新生成的编号是不重复的. 这就需要考验mysql的随机数功能了. Solution mysql的rand函数可以生成一个0到1之间的随机数,进行一定的放大即可得到一个随机数.再通过条件查询来限制新随机数没有在表中出现过.如下所示:

运用简单的bloomfilter算法生成100万个不重复的随机数

本文中只是简单的体会bloomFilter算法的基本原理,设计实现一个生成100万个不重复的随机数. 选择3个分布均匀质数,在这里面质数的选择还是挺有讲究的,要注意不能太小,必须能够满足bloomfilter空间,不然整个空间都是1了还没有找到100万个不重复的随机数.不多说,上代码. #include<stdio.h> #include<stdlib.h> #include<time.h> #include<cstdbool> #define MAXNUM