首页 新闻 会员 周边

关于概率抽奖

0
[已解决问题] 解决于 2015-11-02 19:49

代码如下:

list= new List<ChouJiangItemInfo>
            {
                new ChouJiangItemInfo{ItemId=1,ItemName="起凡至尊礼包",Percentage=25},
                new ChouJiangItemInfo{ItemId=1,ItemName="随机武将灵技能",Percentage=25},
                new ChouJiangItemInfo{ItemId=1,ItemName="貂蝉抱枕",Percentage=35},
                new ChouJiangItemInfo{ItemId=1,ItemName="群雄绝版T恤",Percentage=15}                
            };



var item=(from o in Enumerable.Range(1, 500)
                          let item = list[random.Next(list.Count())]
                          let seed = random.Next(1, 101)
                          where seed < item.Percentage
                          select item).First();

谁能解释下,这个抽奖原理,为什么非要随机一个Item出来,再用随机数去和Item.Percentage去比较  ? 这样概率准确吗?
这种情况下,是不是Item是不是有可能为NULL

如果是下面这段代码:

int seed=random.Next(101);
for(var i=0;i<lst.count;i++)
{
     if(seed<=15&&seed>0)   //15-0=15
    {
        return lst[i];
    }  
    else if(seed<=50&&seed>15) //40-15=25
    {
           return lst[i];
    }
   else if(seed<=75&&seed>50)  //65-40=25
   {
        return lst[i];
   }
   else if(seed<=100&&seed>75)//100-75=25
   {
       return lst[i];  
   }  
}    

这个应该也可能 实现  概率抽奖吧

Piero's的主页 Piero's | 初学一级 | 园豆:0
提问于:2013-09-02 17:54
< >
分享
最佳答案
0

应该是random.Next(101)这个不是真正意义上的随机,之前看到好像是成正态分布的

奖励园豆:5
2J | 初学一级 |园豆:159 | 2013-09-02 22:16

是的啊,我只要在Random random=new Random(DateTime.Now.Ticks),random.Next(101) ,这个从0到100,随机到每个数的概率是1%,然后0-15,的概率就是15%

Piero's | 园豆:0 (初学一级) | 2013-09-03 09:08
其他回答(1)
1

从代码优美的角度来说~~

楼主的方法要是再多一个抽奖item,就要多一个else if,而原先的只要改一下list。所以,原先的更通用

Sheldon_Lou | 园豆:225 (菜鸟二级) | 2013-09-03 08:39

那我下面那个方法,是不是也可以实现概率抽奖了,暂且不考虑通用性

支持(0) 反对(0) Piero's | 园豆:0 (初学一级) | 2013-09-03 09:08

@*滴血*: 个人感觉是的。

支持(0) 反对(0) Sheldon_Lou | 园豆:225 (菜鸟二级) | 2013-09-03 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册