您的位置:首页 > 其它

总结一个随机抽取算法(全部item出现概率和为100%)

2014-10-29 17:25 260 查看
//为避免每次重新回忆的麻烦整理一下

设出现概率A:30%,B:15%,C:45%,D:10%

想像在0到100米的长度中,A占从起点开始的前30米,B占后面的15米,C占再后面的45米,D占最后10米。

你随机选择一个0到100米的长度,该长度落在A区间内的概率就为30%,以此类推。

再想像你从起点开始走这个你刚才选择的长度,则你停在某区间的概率同上。

然后就是代码:

//伪代码,没考虑边界和特殊情况的处理,明白意思就行

#define DISTANCE 100

struct Item

{

char* name;

int chance;

};

Item itemArray = { A, B, C, D};

char* getRandomItem()

{

int chanceSum = 0;

int random = System::Rand() % DISTANCE ;

Item item;

for ( int i = 0; i < itemArray.size(); ++i)

{

chanceSum += itemArray[i].chance;

if (chanceSum > random )

{

item = itemArray[i];

}

}

return item.name;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐