我有一个用于计算游戏分数的数组:
a = {1,7,5,1,2,6,2,3,4,5,5,6,7,7,7}
所有数字都应该简单地添加,除非数字出现多次,例如7(显示4次),应该这样添加:
1*7 + 2*7 + 3*7 + 4*7
所以,总而言之,阵列" 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)
我不知道从哪里开始这样做。什么是这种计算的好方法?
感谢任何帮助。
答案 0 :(得分:5)
您可以跟踪另一个表中每个数字的当前乘数:
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)