//为避免每次重新回忆的麻烦整理一下
设出现概率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;
扫描二维码关注公众号,回复:
3348977 查看本文章
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;
}