10000个人随机找100个出来中奖
Enumerable.Range(1,10000).OrderBy(x=>Guid.NewGuid()).Take(100).ToList().ForEach(x=>
                Console.Write(x+"\t"));

解决方案 »

  1.   

    一、输入条件:
    1.总的抽奖人数
    2.中奖概率(求出:中奖人数总的抽奖人数*中奖概率)二、抽奖流程:
    申请一个中奖人的ID集合(set),初始化为空,
    for(int i=0;i<中奖人数;i++)
    {
      随机产生[1-总人数之间]之间的一个整数R,作为预中奖号码;
      遍历中奖集合ID(set集合),判断R是否已存在
      while(R in set)
        {
          重新随机产生一个整数R;
           再判断;
        }
      把R加入set;
    }
    输出set集合,即为中奖人数ID。
      

  2.   

    但是抽奖的操作是实时的,并非所有人都已经在一个列表里了再抽奖,比如消费后抽个奖,当已经有100人中奖后便不再可能会有人中奖,这样也可以用数组方式来操作吗?如果是实时抽奖,中奖人数达到指定值n后就停止抽奖的,那更简单了:预先设置好一个集合:其中包含n个不重复的数字。
    每来一个人抽奖,就随机生成一个数字,遍历集合,如果都不在集合内,就是没中奖。
    如果那个数字在集合内,就中奖。然后从集合中移除那个数字。
    集合为空则停止抽奖。中奖概率可以由随机生成数字的范围和n控制。
    中奖概率=n/随机数字区间长度