生成不重复的随机数算法

本文转载http://blog.csdn.net/zhoufoxcn/article/details/5825093#comments

有时我们需要从指定的数值范围内随机产生一个数,利用这个伪随机数去实现自己想要实现的东西。在园子里看了不少好文章和代码,发现zhoufoxcn实现这个算法的思路很好,尤其是第三个方法,

效率较好,便把这一skill记载了下来,虽然我们可以用诸如Random rand = new Random(Guid.NewGuid().GetHashCode()); int value = rand.next(intMin, intMax)代码实现,但程序员的最大
乐趣在于自己动脑,用不同的思路写出不同的算法。
  代码如下:

View Code

View Code 

static List<int> GenerateNumber1()
        {
            List<int> result =new List<int>(100);
            Random random =new Random();
            int temp =0;
            while (result.Count <100)
            {
                temp = random.Next(1, 34);
                if (!result.Contains(temp))
                {
                    result.Add(temp);
                }
            }
            return result;

        }

        static List<int> GenerateNumber2()
        {
            List<int> container =new List<int>(33);
            List<int> result =new List<int>(6);
            Random random =new Random();
            for (int i =1; i <=33; i++)
            {
                container.Add(i);
            }

            int index =0;
            int value =0;
            for (int i =1; i <=6; i++)
            {
                index = random.Next(0, container.Count);
                value = container[index];
                result.Add(value);
                container.RemoveAt(index);
            }

            return result;
        }

        staticint[] GenerateNumber3()
        {
            // 用于存放1到33这33个数
int[] container =newint[33];
            //用于保存返回结果 
int[] result =newint[6];
            Random random =new Random();
            for (int i =0; i <33; i++)
            {
                container[i] = i +1;
            }
            int index =0;
            int value =0;
            for (int i =0; i <6; i++)
            {
                //从[1,container.Count + 1)中取一个随机值,保证这个值不会超过container的元素个数   
                index = random.Next(0, container.Length - i);
                //以随机生成的值作为索引取container中的值   
                value = container[index];
                //将随机取得值的放到结果集合中   
                result[i] = value;
                //将刚刚使用到的从容器集合中移到末尾去   
                container[index] = container[container.Length - i -1];
                //将队列对应的值移到队列中   
                container[container.Length - i -1] = value;  

            }
            return result;
        }

时间: 2024-08-02 01:04:08

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

生成不重复的随机数的二种方法

下面我以生成1-10之间的10个不重复的随机数为例介绍生成不重复的随机数的三种方法:1. 通过while循环来实现通过while循环不停的生成随机数,直到生成一个不重复的为止,这种方法比较容易想到,但是效率也比较低下,实例代码如下: static void Main(string[] args) { int[] result = new int[10]; int tmp = -1; Random random = new Random(); bool repeat = false; for (i

javascript生成不重复的随机数_javascript技巧

题目来源:在慕课学习jQuery过程中一道测试题. 初始时:<ul>元素中仅显示5个<li>元素,其中包含还包括最后一个<li>元素,<a>元素中的显示"更多"字符. 当点击"更多"链接时,自身内容变为"简化",同时,<ul>元素中显示全部的<li>元素. 当点击"简化"链接时,自身内容变为"更多",同时,<ul>元素中仅显

C++编写生成不重复的随机数代码_C 语言

C++编写生成不重复的随机数代码 vector<int> getRandom(int total) { srand((int)time(NULL)); std::vector<int> input = *new std::vector<int>(); for (int i = 0; i < total; i++) { input.push_back(i); } vector<int> output = *new vector<int>();

PHP基于自增数据如何生成不重复的随机数示例

本文主要介绍了PHP基于自增数据生成不重复的随机数的相关内容,分享出来供大家参考学习,下面多说无益 直接上代码: 关键点在于生成的自增数据位数控制 位数控制在于两个地方 1. $base 基数组 如果是8位这个数组必须是8位 2. $i 自增数,自增数不能超过8位数 当前简单分析的结果就是以上.大家如果是全局不重复,还是建议使用uuid之类的比较合适. 示例代码: function swap($n,$base) { $mask = 19; //1 + 2 + 16 $n = intval($n,

一起谈.NET技术,生成不重复的随机数的二种方法

下面我以生成1-10之间的10个不重复的随机数为例介绍生成不重复的随机数的三种方法:1. 通过while循环来实现通过while循环不停的生成随机数,直到生成一个不重复的为止,这种方法比较容易想到,但是效率也比较低下,实例代码如下: static void Main(string[] args) {int[] result = new int[10];int tmp = -1; Random random = new Random();bool repeat = false;for (int i

用C#生成不重复的随机数

对于随机数,大家都知道,计算机不可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数.伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了.伪随机数的选 择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地"随机",随机种子的选择就显得非常重要.如果随机种子一样,那么同一个随机数发生器产生 的随机数也会一样.一

用C#生成不重复的随机数的代码_C#教程

对于随机数,大家都知道,计算机不 可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数.伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了.伪随机数的选 择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地"随机",随机种子的选择就显得非常重要.如果随机种子一样,那么同一个随机数发生器产生 的随机数也会一样.

javascript 如何生成不重复的随机数_javascript技巧

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] (new Date().getTime()) ^ Math.random(); 随机且基本上很难重复--那不如这样算了..随机生成不重复的数字,并且还从大到小排列.. [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

python 生成不重复的随机数的代码_python

复制代码 代码如下: import random print 'N must >K else error' n=int(raw_input("n=")) k=int(raw_input("k=")) result=[] x=range(n) for i in range(k): t=random.randint(i,n-1) temp=x[i] x[i]=x[t] x[t]=temp result.append(x[i]) print result raw_i