找回密码
 点一下
查看: 1300|回复: 4

谁能帮我把这个写出来啊 。。在魔兽地图编辑器中

[复制链接]
发表于 2010-6-21 15:02:08 | 显示全部楼层 |阅读模式
要求是
1-10这个不能重复使用  
让他们相加成12

比如说 1+2+3+6
能用编辑器表示出来吗
要表示  1-10所有数字相加=12数组


谢谢各位大神
 楼主| 发表于 2010-6-21 15:05:15 | 显示全部楼层
比如说用 步兵

你选定 1个步兵
他就会生产处 剩余步兵和为12的  数量
回复

使用道具 举报

发表于 2010-6-21 16:15:04 | 显示全部楼层
[codes=jass]function DisplayExpressions takes string prefix, integer min, integer max, integer sum, boolean repeat returns nothing
    if sum == 0 then
       call DisplayTextToPlayer(Player(0), 0, 0, prefix)
       return
    endif
    loop
        exitwhen min > max or min > sum
        if prefix != "" then
            if repeat then
                call DisplayExpressions(prefix + " + " + I2S(min), min, max, sum - min, repeat)
            else
                call DisplayExpressions(prefix + " + " + I2S(min), min + 1, max, sum - min, repeat)
            endif
        else            
            if repeat then
                call DisplayExpressions(I2S(min), min, max, sum - min, repeat)
            else
                call DisplayExpressions(I2S(min), min + 1, max, sum - min, repeat)
            endif
        endif
        set min = min + 1
    endloop
endfunction[/codes]

参数prefix表示前缀,min为最小数,max为最大数,sum为需要的和,repeat为元素能否重复
使用递归实现,初始将prefix设为空字符串"",剩余参数按需设置

比如要得到用1-10,和为12,不允许重复的表达式,如下面这样调用即可
[codes=jass]call DisplayExpressions("", 1, 10, 12, false)[/codes]
回复

使用道具 举报

发表于 2010-6-21 16:33:35 | 显示全部楼层
大概明白了思路。。。。。但是这个语法怎么和平时的不太一样,每个if后面都有return 但是return后面不加东西。。
回复

使用道具 举报

发表于 2010-6-21 16:34:27 | 显示全部楼层
return在无返回值的函数中是直接返回终止函数
函数还在不断修改优化中
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-7-2 20:17 , Processed in 0.077253 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表