Lua - 随机选择每次运行/事件中的3个数字(从250个数字中选择),但要排除一个数字
我想在每个事件中从0到250的数组中获取随机的3个数字(例如3、177、244),但要排除一个预定义的数字(介于0到250之间,例如220)。
例如,
在第一个事件(按按钮)中, 我从另一个数据集中得到220,因此我需要随机数字,如a=3,b=177,c=244(a、b、c不应为220)。
在第二个事件(按按钮)中, 我从另一个数据集中得到15,因此我需要随机数字,如a=77,b=109,c=166(a、b、c不应为15)
您有好的实现想法吗? 寻找一位好的数学家!干杯。
基于@Evan Wrynn的建议,我尝试了以下方法,但我需要一步来获取随机的3个数字,是吗?基本上,我试图将所有数字都放入t中。d是我从另一个源获得的变量。结果应该是包含3个随机数字的t(即t={4、88、221}(在这种情况下不包括85))。目前t似乎得到了重复的数字:(。也欢迎完全的另类想法。
d = 85
dt = {}
t = {}
table.insert(dt,d)
while table.getn(t) < 3 do
function GetMathRandomExclude(lowerbound,upperbound,exclude)
local x = math.random(lowerbound,upperbound)
for _,v in pairs(exclude) do
if v == x then
return GetMathRandomExclude(lowerbound,upperbound,exclude)
else
return table.insert(t,x)
end
end
end
GetMathRandomExclude(1,250,dt)
end
for i, v in ipairs(t) do
print(i, v)
end
数组中。
function GetMathRandomExclude(lowerbound, upperbound, exclude)
local x = math.random(lowerbound, upperbound)
for _, v in pairs(exclude) do
if v == x then
return GetMathRandomExclude(lowerbound, upperbound, exclude)
end
end
return x
end
d = 62
dt = {}
t = {}
table.insert(dt, d)
while table.getn(t) < 3 do
local randomnum = GetMathRandomExclude(1, 250, dt)
table.insert(t, randomnum)
table.insert(dt, randomnum)
end
for i, v in ipairs(t) do
print(i, v)
end
第一个问题是随机函数只检查了第一个数字,因为在 if 语句后面就返回了。可以把它放在函数的末尾来解决这个问题。
如果你不希望所选取的数字添加到排除数组中,可以删除 table.insert(dt, randomnum)。
在之前的回答中,我们会投掷随机数,如果这个数应该被排除,我们就继续投掷,直到获得一个不需要排除的随机数。缺点是如果“可接受”的集合大小和“排除”的集合大小可比,我们可能需要经常重投。
我提议采用另一种方法,我将在下面的示例中进行描述:我们想要从1到10中随机选择,但排除5。因此,我们从1到9中投掷随机数,如果结果大于4,我们将结果加1。这样我们就从1到10中得到了一个随机数,但排除了5。可以通过以下方式实现:
local function get_random_n(min, max , exclude, n)
local result = {}
for i = 1, n do
table.sort(exclude)
result[i] = math.random(min, max - #exclude)
for j = 1, #exclude do
if result[i] > (exclude[j]-1) then
result[i]=result[i]+1
end
end
exclude[#exclude+1]=result[i]
end
return result
end
local function test()
for j = 1, 10 do
local x = get_random_n(1, 10, {3,5,7}, 7)
print("========")
for k = 1, #x do
print(x[k])
end
end
end
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

函数 GetMathRandomExclude(lowerbound,upperbound,exclude) local x = math.random(lowerbound,upperbound) if x == exclude then return GetMathRandomExclude(lowerbound,upperbound,exclude) end return x end如果生成的数字等于要排除的数字,则重新调用函数。你可以用一个表来检查它,从而实现多个排除项。
编辑:
函数 GetMathRandomExclude(lowerbound,upperbound,exclude) local x = math.random(lowerbound,upperbound) if type(exclude) == "table" then for _,v in pairs(exclude) do if v == x then return GetMathRandomExclude(lowerbound,upperbound,exclude) end end else if x == exclude then return GetMathRandomExclude(lowerbound,upperbound,exclude) end end return x endGetMathRandomExclude(NUMBER lowerbound, NUMBER upperbound, NUMBER OR TABLE exclude)