• 生成不重复的随机数算法


    本文转载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(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;
            }
  • 相关阅读:
    【hdu4057】 恨7不成妻
    【hdu3709】 Balanced Number
    【hdu3555】 Bomb
    【hdu2809】 不要62
    【bzoj3992】 SDOI2015—序列统计
    【uoj125】 NOI2013—书法家
    【bzoj1833】 ZJOI2010—count 数字计数
    【bzoj1026】 SCOI2009—windy数
    【bzoj2780】 Sevenk Love Oimaster
    【bzoj3930】 CQOI2015—选数
  • 原文地址:https://www.cnblogs.com/51net/p/3022030.html
Copyright © 2020-2023  润新知