首页 新闻 会员 周边 捐助

问一个签到送积分的算法

0
悬赏园豆:20 [已解决问题] 解决于 2012-12-05 14:36

因积分可以兑换商品或服务,所以希望有一个简单算法。

 

假设签到送积分范围10-100积分,希望大部分积分在靠近10的区域,也就是说越往100,随机产生的几率越低。

问题补充:

找了一个算法,算了1万次,积分10-30之间,分布如下,感觉还可以。

Untitled的主页 Untitled | 初学一级 | 园豆:101
提问于:2012-12-05 12:15
< >
分享
最佳答案
0

bool probability(float i) {
if(i>=1)
return true;
else if(Random.value<i)
return true;
else
return false;
}

收获园豆:10
angelshelter | 大侠五级 |园豆:9914 | 2012-12-05 13:25

我不知道你这段代码含义,但我要的是返回一个整数,介于10-100之间,只不过不是平均分布,而是产生接近于10的更小的整数的概率更大

Untitled | 园豆:101 (初学一级) | 2012-12-05 13:29

比如1万次调用,返回10-15可能占80%,16-50占10%,51-90占8%,91-100占2%(数字随口说的,大概这个意思)

Untitled | 园豆:101 (初学一级) | 2012-12-05 13:31

@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;

}

angelshelter | 园豆:9914 (大侠五级) | 2012-12-05 13:39
其他回答(1)
0

专门建立一个字段,是权重,然后对于每一项,权重都加上上一项的权重,然后正常的random就行了

收获园豆:10
chenping2008 | 园豆:9836 (大侠五级) | 2012-12-05 13:18

然后对于每一项,权重都加上上一项的权重,然后正常的random就行了

 

这句话怎么理解?

支持(0) 反对(0) Untitled | 园豆:101 (初学一级) | 2012-12-05 13:22

@Untitled: 

比如有2想

item1  权重10

itme2 权重20

读取这2项的时候

item1 (新字段10)

itme2 (新字段30(item1的权重10+自己的权重20))

random(0,31)  这样,比较起来你的item2,读取到的概率更高,因为在0~10之间是item1,11~30之间是item2

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-12-05 13:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册