|
思考题:
设置变量: 整数 数组 VALUE
set VALUE[0] = 1
set VALUE[1] = 2
set VALUE[2] = 4
set VALUE[3] = 8
set VALUE[4] = 16
set VALUE[5] = 32
set VALUE[6] = 64
set VALUE[7] = 128
set VALUE[9] = 256
set VALUE[10] = 512
set VALUE[11] = 1024
set VALUE[12] = 2048
set VALUE[13] = 4096
set VALUE[14] = 8192
set VALUE[15] = 16384
set VALUE[16] = 32768
问题: 使用变量VALUE[0]~VALUE[16],计算一个整数 INT ,其范围在 0~64536 之间。 并用整数变量 INDEX 来表示所使用数组变量VALUE所用的索引。
应用: 利用 2 的幂来组合成一个随意的整数。在做装备技能时,这种算法实用性非常大。
以下是具体的函数的写法例子,仅供参考。
[jass]
//============================================================================
// Math Functions
//============================================================================
// 求余数: (integer)Mod( integer a, integer b)
function Mod takes integer a, integer b returns integer
return a - (a/b)*b
endfunction
// 求绝对值: (real)Mod( real a )
function Abs takes real a returns real
if (a >= 0) then
return a
else
return -a
endif
endfunction
function ValueSetIndex takes integer value returns integer
local integer i = 0
local integer j = 0
local integer count = R2I(Abs(value))
local integer int = Mod(value,2)
local boolean exit = false
local boolean end = false
local integer array id
set count = count - int
loop
set j = 0
set i = i + 1
set exit = false
loop
set j = j + 1
set id = R2I( Pow(2,j) )
if id - count == 0 then
// --------------------------------------
set INDEX = j // 用INDEX记录下索引号
// --------------------------------------
set exit = true
elseif id >= count then
// --------------------------------------
set INDEX = j - 1 // 用INDEX记录下索引号
// --------------------------------------
set id = R2I( Pow(2,j-1) )
set exit = true
endif
exitwhen exit
endloop
set count = count - id
if count <= 0 or id == 1 then
set end = true
endif
exitwhen (end)
endloop
if int == 1 then
set i = i + 1
// --------------------------------------
set INDEX[i+1] = 0 // 用INDEX记录下索引号
// --------------------------------------
endif
return i
endfunction
[/jass]
// PS: (integer)ValueSetIndex(integer value),其中value是一个设定取值范围的整数(上面说过了,就像INT一样),用数组变量 INDEX 记录下计算的索引。
函数所返回的是INDEX所用的索引数。通过索引数,我们可以还原所代入的整数值value。
----->设 INT={ INT| ( 0<=INT<=64536) }
local integer sum = 0
local integer index = 0
local integer maxindex = ValueSetIndex( INT )
loop
set sum = sum + VALUE[INDEX[index]]
set index = index + 1
exitwhen index >= maxindex
endloop
PS: 变量 sum 的最终结果为 INT。也就是说, sum 计算完之后等于INT, 就是 ValueSetIndex()函数所代入的参数 |
|