因积分可以兑换商品或服务,所以希望有一个简单算法。
假设签到送积分范围10-100积分,希望大部分积分在靠近10的区域,也就是说越往100,随机产生的几率越低。
找了一个算法,算了1万次,积分10-30之间,分布如下,感觉还可以。
bool probability(float i) {
if(i>=1)
return true;
else if(Random.value<i)
return true;
else
return false;
}
我不知道你这段代码含义,但我要的是返回一个整数,介于10-100之间,只不过不是平均分布,而是产生接近于10的更小的整数的概率更大
比如1万次调用,返回10-15可能占80%,16-50占10%,51-90占8%,91-100占2%(数字随口说的,大概这个意思)
@Untitled: 帮你写清楚吧
我写的是伪代码
int getInt(){
float f=Random.value;
if(f<0.01)
return (int)f*1000+90;
else if(f<0.05)
return (int)f*1000+70;
else if(f<0.1)
return (int)f*100+50;
else
return (int)f*10+10;
}
专门建立一个字段,是权重,然后对于每一项,权重都加上上一项的权重,然后正常的random就行了
然后对于每一项,权重都加上上一项的权重,然后正常的random就行了
这句话怎么理解?
@Untitled:
比如有2想
item1 权重10
itme2 权重20
读取这2项的时候
item1 (新字段10)
itme2 (新字段30(item1的权重10+自己的权重20))
random(0,31) 这样,比较起来你的item2,读取到的概率更高,因为在0~10之间是item1,11~30之间是item2