lua语言 验证握手定理

依然是作业,使用lua语言编写一个程序,随机产生握手次数,验证握手定理:握手次数为奇数次的人有偶数个。

function IsOdd(num) -- 是奇数返回TRUE
    if num % 2 ~= 0 then
        return true
    else
        return false
    end
end

function PrintArr(arr, n)
    local s = ''
    for i = 1, n do s = s .. tostring(arr[i]) .. ' ' end
    print(s)
end

-- math.randomseed(0) -- 随机数种子
MaxNum = 10000
N = math.random(MaxNum) -- 本次握手的人数

local arr = {} -- 每个人握手的次数
for i = 1, N do arr[i] = 0 end

local count = math.random(N * MaxNum) -- 假设一共握手count轮
for i = 1, count do
    local n1 = math.random(N)
    local n2 = math.random(N)
    -- 本次握手是第n1个人和第n2个人进行的,所以n1和n2不能相同
    while n2 == n1 do n2 = math.random(N) end
    arr[n1] = arr[n1] + 1
    arr[n2] = arr[n2] + 1
end

local ans = 0 -- 握手次数是奇数的人的个数
for i = 1, N do if IsOdd(arr[i]) then ans = ans + 1 end end
if IsOdd(ans) then
    print(
        "There's an odd number of people having an odd number of handshakes: ",
        ans)
    PrintArr(arr, N)
    -- 异常情况,打印结果以供判断
else
    print(
        "There's an even number of people having an odd number of handshakes: ",
        ans)
end

绝对不是想水一篇博客……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值