从100个男人里面挑选37个, 问这里面存在最优秀的男人的概率是多少?

-- 随机种子. 根据当前时间来获取随机
math.randomseed(os.time())


-- 男人数量
local nManCount = 100;
-- 挑选数量
local nPick = 37; 
-- 随机次数
local nTotalCount = 1000000


-- 男人列表
local manList = {};




-- 先随机100个男人
for i=1,nManCount do
    table.insert(manList, i)
end;




local function pick()
    -- 100个男人进行洗牌
    for i=1, nManCount do
        local r = math.random(nManCount)
        manList[i], manList[r] = manList[r], manList[i]
    end;

    local nBig = 0;

    -- 洗牌结束, 进行挑选
    for i=1, nPick do
        if manList[i] == 100 then
            -- print("挑到了最优秀的男人")
            return 100
        end;

        if manList[i] > nBig then
            nBig = manList[i]
        end
    end;

    return nBig
end;



-- 结果
local  result = {}

for i=1, nTotalCount do
    local nValue = pick()
    result[nValue] = (result[nValue] or 0) + 1
end;


for k,v in pairs(result) do
    print(k,v)
end

根据某清华大佬的要求写的代码.

得到结果

74    1
75    1
78    4
79    9
80    15
81    29
82    32
83    72
84    123
85    212
86    364
87    638
88    1090
89    1859
90    3009
91    5113
92    8354
93    13511
94    22264
95    36632

96    58495
97    93681
98    148802
99    235773
100    369917
[Finished in 9.4s]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值