我有一个数组,用于计算游戏中的得分:
a = {1,7,5,1,2,6,2,3,4,5,5,6,7,7,7}
Run Code Online (Sandbox Code Playgroud)
应该简单地添加所有数字,除非数字出现多次,例如7(显示4次),应该如下添加:
1*7 + 2*7 + 3*7 + 4*7
Run Code Online (Sandbox Code Playgroud)
所以,总而言之,数组"a"应该给出这个分数:
score = (1*1 + 2*1) + (1*2 + 2*2) + (1*3) + (1*4) + (1*5 + 2*5 + 3*5) + (1*6 + 2*6) + (1*7 + 2*7 + 3*7 + 4*7)
Run Code Online (Sandbox Code Playgroud)
我不知道从哪里开始这样做.这种计算有什么好方法?
任何帮助表示赞赏.
您可以跟踪另一个表中每个数字的当前乘数:
function calculateScore(a)
local multipliers = {}
local score = 0
for i,number in ipairs(a) do
local multiplier = multipliers[number] or 1
multipliers[number] = multiplier + 1
score = score + number * multiplier
end
return score
end
local a = {1,7,5,1,2,6,2,3,4,5,5,6,7,7,7}
local score = calculateScore(a)
Run Code Online (Sandbox Code Playgroud)