我的目标是使用Lua计数到1000,然后随机删除一半的数字,然后将它们列出给我。 这是我到目前为止所拥有的。
i = 1
while i <= 1000 do
print(i)
i = i + 1
end
for i=1, 500, 1 do
print(math.random(i))
end
这个问题是这个代码生成的随机数可以重复。我需要停止这种行为。
答案 0 :(得分:0)
将它们全部放入一个数组并随机删除一半。
math.randomseed(os.time())
local nums = {}
for i = 1,1000 do
num[i] = i
print(i)
end
for i = 1,500 do
print(table.remove(nums, math.random(#nums)))
end
nums = nil
答案 1 :(得分:0)
这样做的一种有效方法是首先从1 - 1000初始化一个随机数字列表。为此,我们可以实现"inside out" Fisher-Yates样式的随机播放。
永远记得给你的PRNG播种!
math.randomseed(os.time())
local function random_numbers (from, to)
local set = {}
for index = from, to do
local place = math.random(index)
if place ~= index then
set[index] = set[place]
end
set[place] = index
end
return set
end
local numbers = random_numbers(1, 1000)
打印它们的问题归结为仅查看数字的一半(或相当于一半的部分)。
for i = 1, 500 do
print(numbers[i])
end
如果你真的想丢弃一半的数字,你应该迭代并清除列表的后半部分。这将确保列表保持密集。
for i = 501, 1000 do
t[i] = nil
end