Random 有没有一种好方法可以在Lua中生成无重复的随机数据?

Random 有没有一种好方法可以在Lua中生成无重复的随机数据?,random,lua,Random,Lua,我以前问过这个问题,但没有得到我想要的答案。经检查,这是我的错,因为我没有明确我的目标是什么,我很抱歉。我正在为我正在学习的AP统计类编写代码,其中必须生成无重复的随机数据。TI计算器使用Lua,所以我希望我可以制作一个程序,不仅生成数字,还可以为我回答问题,只是为了缩短所需的时间。作业的名称是“ESP”。为了时间的缘故,我将缩短场景,有两个人,艾米和本,他们把他们的名字写在两张索引卡上,然后把卡片放在信封里。现在有两个信封,里面有两个人的名字。第三个人给这两个人一个信封。任务是模拟20个或更多

我以前问过这个问题,但没有得到我想要的答案。经检查,这是我的错,因为我没有明确我的目标是什么,我很抱歉。我正在为我正在学习的AP统计类编写代码,其中必须生成无重复的随机数据。TI计算器使用Lua,所以我希望我可以制作一个程序,不仅生成数字,还可以为我回答问题,只是为了缩短所需的时间。作业的名称是“ESP”。为了时间的缘故,我将缩短场景,有两个人,艾米和本,他们把他们的名字写在两张索引卡上,然后把卡片放在信封里。现在有两个信封,里面有两个人的名字。第三个人给这两个人一个信封。任务是模拟20个或更多的试验。给他们信封的人的审判。下面是我为模拟这一点而编写的代码: math.randomseed(os.time())

问题是,您可能会得到这样一个结果: 审判#1 艾米=匹配 本=没有对手

然而,不可能只有一个人获得匹配,反之亦然。所以我想看看是否有办法避免10人而不是2人重复。此外,该程序还可以告诉我每次试验中一定数量的匹配发生了多少次。例如,程序会说“3场比赛-2次”,这意味着在“n”个试验中,2个试验有3场比赛。他们得到了一个写着他们名字的信封。也许这会涉及费舍尔·耶茨的洗牌。现在我已经清楚地重新说明了我的目标,这可能吗?另外,我之所以设置Amy=0和Ben=1,是因为在最初的作业中,共有10人,0-9,而且,最初我将他们命名为a-j,我只是选择了Amy和Ben,以便更容易了解Lua程序的目标

  • 你使用了错误的算法。而不是生成10 独立随机数,生成一个从
    0
    9
    的数组,并 洗牌。看一看
  • 你使用了错误的算法。而不是生成10 独立随机数,生成一个从
    0
    9
    的数组,并 洗牌。看一看

  • 许多人经常面临同样的问题,我在这里提供的解决方案可能帮助了99%的人:

    math.randomseed(os.time())
    
    它为unix时间设置种子,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
    

    您可以很容易地修改它,将其包装为随机,以获取任意范围的数字。

    许多人经常面临同样的问题,这里我提供的解决方案可能可以帮助99%的人:

    math.randomseed(os.time())
    
    它为unix时间设置种子,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
    


    您可以很容易地修改它,将其包装为随机,以获取任意范围的数字。

    谢谢您的帮助,我将尝试一下,看看如何工作。然而,我确实希望独立地生成每个数字,因为这是针对AP统计类的,并且必须是这样。我希望有人能告诉我如何使独立生成的数字只出现一次。@ZackaryCW只需将洗牌数组中的值分配给十个变量。哦,好的,谢谢你的帮助,如果我很烦人,对不起。我做了math.randomseed(os.clock())它只会一次又一次地改变出现的数字。而且,这只是代码的一部分,整个程序生成一组数字的速度非常快,所以我需要一些能够完成10万次随机函数的东西,给我实际的随机数据。谢谢你的帮助,我会尝试一下,看看如何工作。然而,我确实希望独立地生成每个数字,因为这是针对AP统计类的,并且必须是这样。我希望有人能告诉我如何使独立生成的数字只出现一次。@ZackaryCW只需将洗牌数组中的值分配给十个变量。哦,好的,谢谢你的帮助,如果我很烦人,对不起。我做了math.randomseed(os.clock())它只改变了一遍又一遍出现的数字。而且,这只是一段代码的一部分,整个程序生成一组数字的速度非常快,所以我需要一个能做100000次随机函数的东西,给我实际的随机数据。这有帮助,但不能保证不会有重复。事实上,一个随机流必须包含重复。@lhf Oh我误解了他的问题。修复:在随机的返回和打印(random())中缺少结尾括号end@tony谢谢伙计,我的代码最近越来越乱了。我需要更多的练习,lolIt每次为我返回1,7,3,9,6,5,4,10,8,2。没有重复,但集合作为一个整体重复了一次又一次。我想要一些类似于TI-84的随机无重复函数的东西,因为TI也是用LuaThis编写的,它有帮助,但不能保证不会有重复。事实上,一个随机流必须包含重复。@lhf Oh我误解了他的问题。修复:在随机的返回和打印(random())中缺少结尾括号end@tony谢谢伙计,我的代码最近越来越乱了。我需要更多的练习,lolIt每次为我返回1,7,3,9,6,5,4,10,8,2。没有重复,但集合作为一个整体重复了一次又一次。我想要一些类似于TI-84的随机无重复函数的东西,因为TI也是用Lua编写的