依然是作业,使用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
绝对不是想水一篇博客……