生成不重复的随机数算法

简介: 本文转载http://blog.csdn.net/zhoufoxcn/article/details/5825093#comments有时我们需要从指定的数值范围内随机产生一个数,利用这个伪随机数去实现自己想要实现的东西。

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

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

效率较好,便把这一skill记载了下来,虽然我们可以用诸如Random rand = new Random(Guid.NewGuid().GetHashCode()); int value = rand.next(intMin, intMax)代码实现,但程序员的最大
乐趣在于自己动脑,用不同的思路写出不同的算法。
  代码如下:
 
img_405b18b4b6584ae338e0f6ecaf736533.gif 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( 134);
                 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;
        }
目录
相关文章
|
算法 安全 量子技术
【Python】蒙特卡洛模拟 | PRNG 伪随机数发生器 | 马特赛特旋转算法 | LCG 线性同余算法 | Python Random 模块
【Python】蒙特卡洛模拟 | PRNG 伪随机数发生器 | 马特赛特旋转算法 | LCG 线性同余算法 | Python Random 模块
347 0
|
算法 Java
无重复字符的最长子串(算法Java)
无重复字符的最长子串(算法Java)
191 0
无重复字符的最长子串(算法Java)
|
前端开发 算法 JavaScript
LeetCode最大重复子字符串使用JavaScript解题|前端学算法
LeetCode最大重复子字符串使用JavaScript解题|前端学算法
140 0
LeetCode最大重复子字符串使用JavaScript解题|前端学算法
|
算法 前端开发 JavaScript
LeetCode无重复字符的最长子串使用JavaScript解题|前端学算法
前几天做LeetCode算法题,我还说要打十个,今天就被LeetCode狠狠打脸了 算了,难度大的做不出来,咱还做不出来简单的嘛,今天咱们就捡软柿子捏,来找找自信,昨天找了一下自信,我怕自信不够大,今天再找找
99 0
LeetCode无重复字符的最长子串使用JavaScript解题|前端学算法
|
算法 安全 PHP
【高级软件实习】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特旋转算法 | Python Random 模块
本篇博客将介绍经典的伪随机数生成算法,我们将 重点讲解 LCG(线性同余发生器) 算法与马特赛特旋转算法,在此基础上顺带介绍 Python 的 random 模块。 本篇博客还带有练习,无聊到喷水的练习,咳咳…… 学完前面的内容你就会了解到 Python 的 Random 模块的随机数生成的实现,是基于马特赛特旋转算法的,比如 random_uniform 函数。而本篇博客提供的练习会让你实现一个基于 LCG 算法的random_uniform,个人认为还是比较有意思的
567 0
【高级软件实习】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特旋转算法 | Python Random 模块
|
算法 PHP
php关于数组n个随机数分成x组,使每组值相近的算法
php关于数组n个随机数分成x组,使每组值相近的算法
114 0
php关于数组n个随机数分成x组,使每组值相近的算法
|
算法
【Day34】LeetCode算法 -- 3. 无重复字符的最长子串
学习LeetCode算法 -- 3. 无重复字符的最长子串。
140 0
【Day34】LeetCode算法 -- 3. 无重复字符的最长子串
|
算法 索引
【Day15】算法刷题(解题思路+详细注释)[面试题 17.09. 第 k 个数 ][424. 替换后的最长重复字符 ][438. 找到字符串中所有字母异位词 ]
了解[面试题 17.09. 第 k 个数 ][424. 替换后的最长重复字符 ][438. 找到字符串中所有字母异位词 ]。
173 0
【Day15】算法刷题(解题思路+详细注释)[面试题 17.09. 第 k 个数 ][424. 替换后的最长重复字符 ][438. 找到字符串中所有字母异位词 ]
|
存储 算法
面试高频算法题---无重复字符的最长子串
给定一个字符串s,请你找出其中不含有重复字符的最长子串长度
面试高频算法题---无重复字符的最长子串
下一篇
无影云桌面