您现在的位置: 圆点视线 >> 教程 >> 媒体动画 >> Director >> 文章正文
用Lingo解决组合问题         ★★★
用Lingo解决组合问题
作者:佚名  文章来源:圆点视线  点击数:  更新时间:2005-12-27 18:40:29 
 页面功能:【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口 【字体:
有5张卡片,从中任取3张,列出所有可能的结果。

  [分析]

  输入卡片列表并确定最终组合列表的长度 ——〉计算组合的总数并生成组合列表 ——〉输出组合列表

  [代码]

  由于是有关排列组合的问题,必然会涉及到阶乘的计算。为了方便起见,可以先设计一个阶乘计算程序:

on mGetFactorial (me, num)
  factorial = 1
  repeat with x = num down to 1
    factorial = factorial * x
  end repeat
  return factorial
end

  接下来,就可以利用这个阶乘计算程序得到组合的总数:

-- 计算阶乘
listFactorial = me.mGetFactorial(pListCount)
subsetFactorial = me.mGetFactorial(pSubsetCount)
listMinusSubsetFactorial = me.mGetFactorial(pListCount - pSubsetCount)
-- 计算组合总数
pTotal = listFactorial / (subsetFactorial * (listMinusSubsetFactorial))
pNumLeft = pTotal

  现在,借助一个索引数值,通过循环语句即可生成一个索引列表:

on mGetCombination (me)
  -- 检测是否为第一次循环
  if pNumLeft = pTotal then
    -- 是第一次循环,使用当前子列表
    pNumLeft = pNumLeft - 1
  else
    -- 不是第一次循环,获取新的子列表
    x = pSubsetCount
    -- 在当前子列表中循环并增值
    repeat while pCurrentSubset[x] = pListCount - pSubsetCount + x
      x = x - 1
    end repeat
    pCurrentSubset[x] = pCurrentSubset[x] + 1
    repeat with y = (x + 1) to pSubsetCount
      pCurrentSubset[y] = pCurrentSubset[x] + y - x
    end repeat
    -- 获取新的子列表
    pNumLeft = pNumLeft - 1
  end if
end

  之所以没有直接对实际的卡片列表进行直接操作,是为了让程序拥有更强的适应性。因为只要拥有了索引列表,就可以对任何传入的实际列表进行“组合”操作,而不仅仅限于这个卡片列表。当然,只需再添加一些代码,即可生成实际的结果列表:

-- 生成结果列表
combination = []
repeat with x = 1 to pSubsetCount
  combination.add (pItemList[pCurrentSubset[x]])
end repeat
 [说明]

  这项技巧虽然比较简单,但使用的范围却非常广泛,例如卡片的随机抽取或数列的随机生成。此外,在许多涉及到需要列举组合结果的数学问题中都占有一席之地。
 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 文章录入:apoints    责任编辑:apoints  【字体:
 
  • 上一篇文章:

  •  
  • 下一篇文章:
  • 最新文章
    相关文章
    Director怎样制作自定义光标
    用Director控制动画GIF
    director应用技巧
    flash和director之间的沟通技巧
    Director中控制声音音量的几种方法
    Director8行为库的应用
    用Director创建涂色板
    认识Director中的Xtra
    如何检测演员的载入进度
    对象列表的调用与删除
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
     姓  名: 评 分: 1分 2分 3分 4分 5分
     评论内容: ·严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
    ·用户需对自己在使用本网服务过程中的行为承担法律责任
    ·本站管理员有权保留或删除评论内容。
    ·评论内容只代表机友个人观点,与本网站立场无关。
     
    最 新 推 荐
     
    百度主题推广
    最 新 热 门