如何在 Lua 中生成无重复的随机数据?
我之前曾经问过这个问题,但是没有得到我想要的答案。经过检查,我意识到这是我的问题,因为我没有清楚地表明我的目标,我很抱歉。我正在为我正在学习的 AP 统计课程编写代码,其中必须生成无重复的随机数据。TI 计算器使用 Lua,因此我希望我可以编写一个程序,不仅可以生成数字,还可以为我回答问题,以缩短所需的时间。这个任务的名称是“ESP。”我将缩短情节,有两个人,Amy 和 Ben,他们在两张索引卡上写了他们的名字,然后把他们的卡片放在一个信封里。现在有两个信封里面有两个人的名字。第三个人给了这两个人一个信封。该任务是模拟 20 次或更多次试验。每次试验是指这个人把信封交给他们。以下是我编写的代码来模拟这个过程: math.randomseed(os.time())
Amy = 0
Ben = 1
print(“输入您想要模拟的试验次数。”)
res = io.read()
for c = 1,res do
print(“试验 #”..c)
Amy_ = Amy - math.random(0,1)
如果 Amy_ == 0 然后
print(“Amy = 匹配”)
elseif Amy_ ~= 0 然后
print(“Amy = 不匹配”)
end
Ben_ = Ben - math.random(0,1)
如果 Ben_ == 0 然后
print(“Ben = 匹配”)
elseif Ben_ ~= 0 然后
print(“Ben = 不匹配”)
end
end
while true do
end
这个问题是你可能得到一个结果说: 试验 #1 Amy = 匹配 Ben = 不匹配
然而,只有一个人得到匹配,另一个人得到不匹配是不可能的。因此,我想知道是否有一种方法可以避免重复,而不是使用 2 个人而是使用 10 个人。此外,该程序可以告诉我每次试验中某个数量的匹配发生了多少次。例如,该程序可能会说“3 次匹配 - 2 次”,这意味着在“n”个试验中,有 2 次试验有 3 个匹配项。匹配是指他们得到带有他们名字的信封。也许这将涉及 Fisher-Yates Shuffle。既然我已经明确表达了我的目标,这可能吗?此外,我将 Amy = 0 和 Ben = 1 的原因是因为在原始作业中有 10 个人,0-9,另外,最初我将它们命名为 a-j,我只是选择了 Amy 和 Ben,以便更容易看到这个 Lua 程序的目标。
- 你正在使用错误的算法。不要生成10个独立的随机数,而是生成一个包含0到9的数组,并将其洗牌。参考Fisher-Yates shuffle。
- 参见Lua math.random不起作用。
许多人经常面临相同的问题,这里我提供的解决方案可能对他们中的99%有所帮助:
math.randomseed(os.time())
它将种子设置为Unix时间,该时间始终在变化,因此每次都会有所不同。
但是只需将其放在脚本的顶部,不要多次使用它。
如果您希望完全忽略重复:
local left = {}
for i = 1,10 do
left[i] = i
end
local function Random()
return table.remove(left, math.random(#left))
end
for i = 1,10 do
print(Random())
end
您可以轻松修改此内容,将Random封装为采取任何数字范围。
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法