生成不重复随机数

利用C++中的bitset来检查生成的随机数是否重复。这样可以将内存空间的消耗降低,并且在每次检查是否重复时不用搜索整个序列。

#include <iostream>
#include <ctime>
#include <bitset>
using namespace std;

#define MAX 101

int main(void)
{
    bitset <MAX> flag;
    srand((unsigned)time(NULL));

    for (int i = 0; i < MAX; ++i)
    {
        int val = rand() % MAX;
        if(!flag[val]) //not exist
        {
            printf("%3d ", val);
            flag.set(val);
        }
        else i--;
    }
    printf("\n");
    return 0;
}
时间: 2024-12-25 19:42:27

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

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之间的随机数,进行一定的放大即可得到一个随机数.再通过条件查询来限制新随机数没有在表中出现过.如下所示:

生成不重复随机数函数

// 生成随机数函数 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# Random 生成不重复随机数

Random 类 命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备. 伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,因为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了. 伪随机数的生成是从种子值开始.如果反复使用同一个种子,就会生成相同的数字系列.产生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列.默认情况下,Random 类的无参数构造函数

如何更快的生成不重复随机数思路

最新接到一个需求,由于运营需要我们需要在原用户的信息上加入一个邀请码用于推广. 略为思考一下,我们可以将需要拆分为一下几点: 1.邀请码为数字和字母组成6位的随机数 2.随机数不能重复 3.将数据与用户关联,插入数据库 -------------------------------------------------------------------- 解决思路: 生成随机数不表,大家应该都会 不重复如何解决呢,有同学想到先到数据库中做一次查询,如果没有该随机数再进行插入,如果有重新生成,做一

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

JS生成不重复随机数

说明 我们可以用Math.random()的方法轻松的生成 一个随机的数字,但是这个数字可能是重复的.有时候,我们需要一个不重复的随机数,可以用很多的方法来实现这个要求,以下方法是效率最高的. 解释 不重复的随机数往往是规定范围的,我们先声明一个在这个范围之内的数组,然后用sort方法对数组进行排序.而排序的方法里使用一个随机数,这个随机数使这个排序方法是不确定的.因此可以得到一个不重复的随机数组. 代码 1 <!DOCTYPE html> 2 <html> 3 <head&

C#生成不重复随机数的方法

在使用Random类生成随机数时,我们可能会碰到生成随机数重复的问题. 比如我们要生成6位数字验证码,虽然也是使用Random,但是可能出现111111,999999这样的情况. 这是因为在实例化Random类时,如果随机种子不填写,默认是以时间线作为种子进行伪随机运算,当计算运行速度过快时,导致所有的随机种子都是一个值. 解决的方法也很简单,我们使用Guid的哈希码作为种子值,就不会重复了,代码如下: 1 public class RandomHelper 2 { 3 /// <summary

c# 生成不重复随机数

1 //从min到max个连续整数中产生n个随机数 2 private static int[] GenerateNumbers(int min, int max, int n) 3 { 4 //seed array 长度 5 int seedNum = max - min + 1; 6 //seed array 7 int[] startArray = new int[seedNum]; 8 9 for (int i = 0; i < seedNum; i++) 10 { 11 startAr