首页 > 解决方案 > 使用循环解决如果数字 < 超过 200 个先前的数字,则返回 1

问题描述

我正在用 lua 编写一个小程序,我希望能得到一些关于什么是最正确的方法来解决这个问题。基本上,如果我的数字大于最后 200 个数字,则返回 1,否则返回 0。

我认为最好的方法是循环?假设 x 是我的数字在表格中的位置,然后我想检查它是否大于前 200 个数字,如果是则返回 1,否则返回 0。

while (x > x-a)
    do
        isbigger = 1;
        a = a+1;
        return isbigger;
    end

我不确定这是否是正确的语法,它在技术上也会在每次通过循环时返回 1,如果我的数字大于前一个数字 200,我只想在最后返回它。另外,如果它是假的(我猜是休息),如何摆脱循环?感谢您的帮助,祝您有美好的一天!

标签: lua

解决方案


如果要循环一个值数组,则应使用 for 循环。您也不想isbigger从循环内部返回,因为它会过早结束循环

local last = 10
local myNumber = 123
local numbers = {}

--Setup our example numbers table
math.randomseed(os.clock())
for i = 1, 40 do
    numbers[i] = math.random(1,200)
end

--Run comparison on our the last x values
local isBigger = true
for i = #numbers, #numbers - last, -1 do
    print(myNumber, numbers[i],  myNumber > numbers[i])
    isBigger= isBigger and myNumber > numbers[i]
end

print("isBigger is: " .. isBigger)
return isBigger and 1 or 0

示例输出

123 181 false
123 6   true
123 77  true
123 78  true
123 145 false
123 130 false
123 104 true
123 114 true
123 6   true
123 4   true
123 15  true
isBigger is: false

上面的 for 循环更适合理解正在发生的事情,但这个循环更适合使用,因为一旦找到显示myNumber不更大的结果,它将退出。

local isBigger = true
for i = #numbers, #numbers - last, -1 do
    print(myNumber, numbers[i],  myNumber > numbers[i])
    if not (myNumber > numbers[i]) then
        isBigger = false
        break
    end
end

推荐阅读