生成不重复的随机数算法

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

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

效率较好,便把这一skill记载了下来,虽然我们可以用诸如Random rand = new Random(Guid.NewGuid().GetHashCode()); int value = rand.next(intMin, intMax)代码实现,但程序员的最大
乐趣在于自己动脑,用不同的思路写出不同的算法。
  代码如下:
 
 
ExpandedBlockStart.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;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值