设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1742|回复: 2
打印 上一主题 下一主题

[已经解决] 随机一个从n到m的数,如何让数越大随机到的概率就越低。

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2821
在线时间
585 小时
注册时间
2022-7-13
帖子
89
跳转到指定楼层
1
发表于 2023-1-12 11:20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 我为鱼肉 于 2023-1-13 16:35 编辑

随机一个从n到m的数,如何让数越大随机到的概率就越低。



已经解决,这是我按照菜刀提供的思路,定义的方法(比用数组或许能快一点点吧)。
RUBY 代码复制
  1. module Kernel
  2.   def random(range)
  3.     first = range.first
  4.     last = range.exclude_end? ? range.last - 1 : range.last
  5.     max = (last - first + 1) * (first + last) / 2   
  6.     result = rand(max) + 1
  7.     for i in range
  8.       small = i > first ? ((i - first) * (first + i - 1) / 2) : 0
  9.       large = i > first ? ((i - first + 1) * (first + i) / 2) : first
  10.       break if result > small and result <= large
  11.       #return i if result > small and result <= large
  12.     end
  13.     return last - i + first
  14.   end
  15. end
  16. #代码测试
  17. a = []
  18. 1000.times{
  19. r = random(20..40)
  20. if a[r].nil?
  21.   a[r] = 0
  22. end
  23. a[r] += 1
  24. }
  25. a.delete(nil)
  26. p a
  27. exit

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
2
发表于 2023-1-12 11:53:58 | 只看该作者
f = []
max = m + 1
for i in n..m
  (max - i).times{f.push(i)}
end
p f[rand(f.size)]

评分

参与人数 3星屑 +50 +2 收起 理由
RyanBern + 50 认可答案
taeckle + 1 精品文章
我为鱼肉 + 1 确实可以

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

3
发表于 2023-1-12 17:37:57 | 只看该作者
使用非线性映射就行:y = (rand(x) ** 0.5 * (M - N) + N).to_i,只要函数相对y = x上凸就行

评分

参与人数 3星屑 +50 +2 收起 理由
RyanBern + 50 认可答案
taeckle + 1 我很赞同
我为鱼肉 + 1 贫瘠的数学知识表示看不懂

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 01:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表