之前我问过这个问题,但没有得到我想要的答案。经过检查,这是我的错,因为我没有说明我的目标是什么,我很抱歉。我正在为AP统计类I代码制作代码,其中必须生成没有重复的随机数据。 TI计算器使用Lua,因此我希望我能制作一个程序,不仅可以生成数字,还可以为我回答问题,只是为了缩短所需的时间。作业的名称是" ESP。"为了时间的缘故,我会缩短这个场景,有两个人,Amy和Ben,他们在两张索引卡上写下了名字,然后将他们的卡放在一个信封里。现在有两个信封,里面有两个人的名字。第三个人给这两个人一个信封。任务是模拟20个或更多的试验。审判是向他们提供信封的人。这是我编写的代码来模拟这个: math.randomseed(os.time())
Amy = 0
Ben = 1
print("Enter the number of trials you want to simulate.")
res = io.read()
for c = 1, res do
print("Trial #"..c)
Amy_ = Amy - math.random(0, 1)
if Amy_ == 0 then
print("Amy = match")
elseif Amy_ ~= 0 then
print("Amy = not a match")
end
Ben_ = Ben - math.random(0, 1)
if Ben_ == 0 then
print("Ben = match")
elseif Ben_ ~= 0 then
print("Ben = not a match")
end
end
while true do
end
这个问题是你可以得到一个结果: 试验#1 艾米=比赛 本=不匹配
但是,只有一个人不可能获得比赛,反之亦然。所以我一直想看看是否有办法避免重复10人而不是2人。另外,程序告诉我每次试验发生了多少次匹配。例如,程序会说" 3匹配 - 2次",这意味着' n'试验,2项试验有3场比赛。一场比赛,他们得到了他们的名字的信封。也许这将涉及Fisher-Yates Shuffle。现在我已经明确重申了我的目标,这可能吗?另外,我设置Amy = 0和Ben = 1的原因是因为在原始作业中,有10个人,0 - 9,原来我将它们命名为a - j,我只是选择了Amy和Ben这样它&# 39;这个Lua程序更容易看出目标是什么。
答案 0 :(得分:2)
0
到9
的数组,和
洗牌吧。看看Fisher–Yates shuffle。答案 1 :(得分:2)
许多人经常面临同样的问题,在这里我提供的解决方案可能有助于大约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
你可以轻松地修改它以包装随机以获取任何数字范围。