易语言采用递归算法解决12球排列

511遇见

程序集变量

.版本 2
 
.程序集 启动窗口程序集
.程序集变量 小球数组, 整数型, , "12", 1表示正常,0表示轻,2表示重
.程序集变量 小球总数, 整数型
.程序集变量 轻重, 文本型

比较小球子程序

.版本 2

.子程序 比较小球子程序, , , 比较每组小球重量
.参数 小球起始编号, 整数型, , 每组小球的起始值
.参数 本组小球总数, 整数型, , 当前分组小球的个数
.局部变量 重量1, 整数型, , , 第一组小球重量
.局部变量 重量2, 整数型, , , 第二组小球重量
.局部变量 重量3, 整数型, , , 第三组小球重量
.局部变量 分组数, 整数型, , , 每组小球数
.局部变量 局部计次变量, 整数型

分组数 = 本组小球总数 ÷ 3
.如果真 (分组数 ≤ 1)
比较轻重子程序 (小球起始编号)
返回 ()
.如果真结束
.计次循环首 (分组数, 局部计次变量) ' 计算第一组重量
重量1 = 重量1 + 小球数组 [小球起始编号 - 1 + 局部计次变量]
.计次循环尾 ()
.计次循环首 (分组数, 局部计次变量) ' 计算第二组重量
重量2 = 重量2 + 小球数组 [小球起始编号 - 1 + 分组数 + 局部计次变量]
.计次循环尾 ()
.计次循环首 (分组数, 局部计次变量) ' 计算第三组重量
重量3 = 重量3 + 小球数组 [小球起始编号 - 1 + 2 × 分组数 + 局部计次变量]
.计次循环尾 ()
.判断开始 (重量1 = 重量2) ' 相等则坏球不在1组2组中
结果编辑框.加入文本 (到文本 (小球起始编号) + “-” + 到文本 (小球起始编号 - 1 + 分组数) + “的重量 = ” + 到文本 (小球起始编号 + 分组数) + “-” + 到文本 (小球起始编号 - 1 + 2 × 分组数) + “的重量,坏球不在1组2组中”)
比较小球子程序 (小球起始编号 + 2 × 分组数, 分组数)
.默认
' 坏求在1组或2组中
' ' 1组重
.判断开始 (重量1 > 重量2)
结果编辑框.加入文本 (到文本 (小球起始编号) + “-” + 到文本 (小球起始编号 - 1 + 分组数) + “的重量 > ” + 到文本 (小球起始编号 + 分组数) + “-” + 到文本 (小球起始编号 - 1 + 2 × 分组数) + “的重量,1组重”)
.判断开始 (重量1 = 重量3) ' 坏球在2组,轻
结果编辑框.加入文本 (#换行符 + 到文本 (小球起始编号) + “-” + 到文本 (小球起始编号 - 1 + 分组数) + “的重量 = ” + 到文本 (小球起始编号 + 2 × 分组数) + “-” + 到文本 (小球起始编号 - 1 + 3 × 分组数) + “的重量,2组有轻球”)
比较小球子程序 (小球起始编号 + 分组数, 分组数)
.判断 (重量1 > 重量3) ' 坏球在1组,重
结果编辑框.加入文本 (#换行符 + 到文本 (小球起始编号) + “-” + 到文本 (小球起始编号 - 1 + 分组数) + “的重量 > ” + 到文本 (小球起始编号 + 2 × 分组数) + “-” + 到文本 (小球起始编号 - 1 + 3 × 分组数) + “的重量,1组有重球”)
比较小球子程序 (小球起始编号, 分组数)
.默认
.判断结束
.默认
' 2组重(重量1<重量2) 结果编辑框.加入文本 (到文本 (小球起始编号) + “-” + 到文本 (小球起始编号 - 1 + 分组数) + “的重量 < ” + 到文本 (小球起始编号 + 分组数) + “-” + 到文本 (小球起始编号 - 1 + 2 × 分组数) + “的重量,2组重”) .判断开始 (重量1 = 重量3) ' 坏球在2组,重 结果编辑框.加入文本 (#换行符 + 到文本 (小球起始编号) + “-” + 到文本 (小球起始编号 - 1 + 分组数) + “的重量 = ” + 到文本 (小球起始编号 + 2 × 分组数) + “-” + 到文本 (小球起始编号 - 1 + 3 × 分组数) + “的重量,2组有重球”) 比较小球子程序 (小球起始编号 + 分组数, 分组数) .判断 (重量3 > 重量1) ' 坏球在1组,轻 结果编辑框.加入文本 (#换行符 + 到文本 (小球起始编号) + “-” + 到文本 (小球起始编号 - 1 + 分组数) + “的重量 〈 ” + 到文本 (小球起始编号 + 2 × 分组数) + “-” + 到文本 (小球起始编号 - 1 + 3 × 分组数) + “的重量,1组有轻球”) 比较小球子程序 (小球起始编号, 分组数) .默认 .判断结束 .判断结束 .判断结束 返回 ()

比较轻重子程序

.版本 2
 
.子程序 比较轻重子程序, , , 比较单个小球的重量
.参数 小球起始编号, 整数型, , 该组的起始位置
.局部变量 重量1, 整数型, , , 该组第一个球重量
.局部变量 重量2, 整数型, , , 该组第二个球重量
.局部变量 重量3, 整数型, , , 该组第三个球重量
.局部变量 重量4, 整数型, , , 该组第四个球重量
 
重量1 = 小球数组 [小球起始编号]
重量2 = 小球数组 [小球起始编号 + 1]
重量3 = 小球数组 [小球起始编号 + 2]
重量4 = 小球数组 [小球起始编号 + 3]
.判断开始 (重量1 = 重量2)  ' 相等则坏球不在1组2组中
    结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “小球重量 = ” + “第” + 到文本 (小球起始编号 + 1) + “小球重量”)
    .判断开始 (重量3 = 重量1)  ' 坏球在第4组
        结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号 + 2) + “小球重量 = ” + “第” + 到文本 (小球起始编号) + “小球重量”)
        .判断开始 (重量4 > 重量1)
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号 + 3) + “号球太重,是坏球”)
        .默认
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号 + 3) + “号球太轻,是坏球”)
        .判断结束
 
    .判断 (重量3 ≠ 重量1)  ' 坏球在3组
        结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号 + 2) + “小球重量 ≠ ” + “第” + 到文本 (小球起始编号) + “小球重量”)
        .判断开始 (重量3 > 重量1)
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号 + 2) + “号球太重,是坏球”)
        .默认
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号 + 2) + “号球太轻,是坏球”)
        .判断结束
    .默认
    .判断结束
.默认
    ' 坏求在1组或2组中
    ' '  1组重
    .判断开始 (重量1 > 重量2)
        结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “小球重量 > ” + “第” + 到文本 (小球起始编号 + 1) + “小球重量”)
        .判断开始 (重量1 = 重量3)  ' 坏球在2组,轻
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “小球重量 = ” + “第” + 到文本 (小球起始编号 + 2) + “小球重量”)
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号 + 1) + “号球太轻是坏球”)
        .判断 (重量1 > 重量3)  ' 坏球在1组,重
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “小球重量 > ” + “第” + 到文本 (小球起始编号 + 2) + “小球重量”)
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “号球太重,是坏球”)
        .默认
        .判断结束
    .默认
        ' 2组重(重量1<重量2)
        结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “小球重量 < ” + “第” + 到文本 (小球起始编号 + 1) + “小球重量”)
        .判断开始 (重量3 = 重量1)  ' 坏球在2组,重
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “小球重量 = ” + “第” + 到文本 (小球起始编号 + 2) + “小球重量”)
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号 + 1) + “号球太重,是坏球”)
        .判断 (重量3 > 重量1)  ' 坏球在1组,轻
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “小球重量 < ” + “第” + 到文本 (小球起始编号 + 2) + “小球重量”)
            结果编辑框.加入文本 (#换行符 + “第” + 到文本 (小球起始编号) + “号球太轻,是坏球”)
        .默认
        .判断结束
    .判断结束
.判断结束

计算

.版本 2
 
.子程序 _计算图形按钮_被单击
.局部变量 坏球编号, 整数型
.局部变量 局部计次变量, 整数型
 
结果编辑框.内容 = “”
小球总数 = 12
.计次循环首 (小球总数, 局部计次变量)
    小球数组 [局部计次变量] = 1
.计次循环尾 ()
坏球编号 = 到数值 (编号组合框.取项目文本 (编号组合框.现行选中项))
.判断开始 (重量组合框.取项目文本 (重量组合框.现行选中项) = “重”)
    小球数组 [坏球编号] = 2
.默认
    小球数组 [坏球编号] = 0
.判断结束
比较小球子程序 (1, 小球总数)

发布日期:

所属分类: 易语言 标签: