lua算法(連載)


題目一、給一個表,表里有5個數,在[0-13]之間,其中0可以表示任意數,判斷這個表是否連續
思路:
連續的條件:
1、表中都是0
2、表中有4個0
3、0個數不大於3,經過排序之后除去0之外,最大值減去最小值的差小於5
注意:要排除掉除去0之外的數里面有相同的數

local list = {0,0,2,5,1}
function toCheck ()
    table.sort(list) -- 把數組從小到大排序
    local zero_num = 0
    for k,v in pairs(list) do
         if v == 0 then
             zero_num = zero_num + 1
         elseif v ~= 0 then
             for i = k+1,#list do
                    if v == list[i] then
                      print("該表不連續")

                       return
                   end   
             end
         end              
    end
    if zero_num == 4 or zero_num ==5 then
      print("該表連續") 
    elseif list[#list] - list[zero_num + 1] < 5 then
      print("該表連續")
    else
      print("該表不連續")
    end
end
toCheck()                    

 

題目二、如何將一組數據等概率打亂?
t = {1,2,3,4,5,6,7,8,9}
local function shuffle(t)
    if not t then return end
    local cnt = #t
    for i=1,cnt do
        local j = math.random(i,cnt)
        t[i],t[j] = t[j],t[i]
    end
end
shuffle(t)
for k,v in pairs(t) do
    print(v)
end 

 

題目三、將一個數組從小到大排序,然后將重復出現的數字全部刪除(后續數字往前移)
local t = {4,2,3,4,1,6,5,8,7}
local newArray = {}
table.sort(t)
newArray[1] = t[1]
for i = 2,#t do
    if t[i] ~= t[i - 1] then
        newArray[i] = t[i]
    end
end
for k,v in pairs(newArray) do
    print(v)
end

 

題目四、編寫一個函數,將某個數組分成兩個數組,一個存放偶數,一個存放奇數
local t = {4,2,3,4,1,6,5,8,7}
function device(array)
    local oushuArr = {}
    local jishuArr = {}
    for i = 1,#array do
        if t[i] % 2 == 0 then
            oushuArr[#oushuArr + 1] = array[i]
        else
            jishuArr[#jishuArr + 1] = array[i]
        end
    end
    return oushuArr,jishuArr
end

local a,b = device(t)

for k,v in pairs(a) do
    print(v)
end
print("=========")
for k,v in pairs(b) do
    print(v)
end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM