生成不重复的随机数算法

本文转载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;
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发

C语言 第二章 数据类型、变量和输入函数

一、数据类型简介 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 ?...

2545
来自专栏魂祭心

原 c#中闭包的实现方法

3146
来自专栏五分钟学算法

五分钟学会一个有意思的排序:计数排序

由于LeetCode上的算法题很多涉及到一些基础的数据结构,为了更好的理解后续更新的一些复杂题目的动画,推出一个新系列 -----《图解数据结构》,主要使用动画...

1206
来自专栏Script Boy (CN-SIMO)

几个整数求和

任务描述 在eclipse中通过配置运行参数,编写程序求这些整数参数之和然后输出参数个数与所求之和。 设计思想 获取的参数是String类型的,通过Intege...

2450
来自专栏Java技术栈

屌炸天,JDK8的排序大法!!

首先祝大家端午节快乐! 今天总结了下JDK中排序的方法,包括JDK8中强大的lambda表达式及函数式接口运用,不废话,请看下面示例。 public class...

2686
来自专栏大闲人柴毛毛

剑指offer代码解析——面试题14调整数组顺序使奇数在偶数之前

本题详细解析都已在代码中注释了: /** * 题目:输入一个数组,要求将奇数放在数组的前半段,偶数放在数组的后半段 * @author 大闲人柴毛毛 *...

3145
来自专栏恰童鞋骚年

《C#图解教程》读书笔记之五:委托和事件

  (1)本质:持有一个或多个方法的对象;委托和典型的对象不同,执行委托实际上是执行它所“持有”的方法。如果从C++的角度来理解委托,可以将其理解为一个类型安全...

922
来自专栏决胜机器学习

PHP数据结构(二十一) ——希尔排序

PHP数据结构(二十一)——希尔排序 (原创内容,转载请注明来源,谢谢) 一、概述 希尔排序,又称缩小增量排序,也属于插入排序类方法,时间上有较大改进。前面...

3547
来自专栏javathings

Spring Expression Language(SpEL)速查指南

Spring Expression Language(SpEL)是一种表达式语言。它能在运行时通过构建表达式、存取对象的属性值或者调用对象的方法等操作。

3183
来自专栏小文博客

写出这个数——《C语言代码笔记》

2602

扫码关注云+社区

领取腾讯云代金券