|
发表于 2025-5-22 16:17:51
|
显示全部楼层
广东省茂名市

.版本 2
.支持库 spec
.局部变量 i, 整数型
预算 = 145020.8
商品列表 [1].名称 = “商品1”
商品列表 [1].单价 = 57090.5
商品列表 [1].最大数量 = 取整 (预算 ÷ 商品列表 [1].单价)
商品列表 [2].名称 = “商品2”
商品列表 [2].单价 = 16143.54
商品列表 [2].最大数量 = 取整 (预算 ÷ 商品列表 [2].单价)
商品列表 [3].名称 = “商品3”
商品列表 [3].单价 = 15835.28
商品列表 [3].最大数量 = 取整 (预算 ÷ 商品列表 [3].单价)
商品列表 [4].名称 = “商品4”
商品列表 [4].单价 = 9621.4
商品列表 [4].最大数量 = 取整 (预算 ÷ 商品列表 [4].单价)
商品列表 [5].名称 = “商品5”
商品列表 [5].单价 = 8071.76
商品列表 [5].最大数量 = 取整 (预算 ÷ 商品列表 [5].单价)
重定义数组 (最优方案.数量, 假, 5)
最优方案.总花费 = 0
递归搜索方案 (1, 0, 最优方案.数量)
显示结果 ()
.子程序 递归搜索方案
.参数 当前索引, 整数型
.参数 当前总价, 小数型
.参数 当前数量数组, 整数型, 数组
.局部变量 临时数量, 整数型, , "5"
.局部变量 剩余金额, 小数型
.局部变量 i, 整数型
.如果真 (当前索引 > 5)
剩余金额 = 预算 - 当前总价
.如果真 (剩余金额 ≥ 0 且 剩余金额 < 预算 - 最优方案.总花费)
最优方案.总花费 = 当前总价
最优方案.数量 = 当前数量数组
.如果真结束
返回 ()
.如果真结束
临时数量 = 当前数量数组
.计次循环首 (商品列表 [当前索引].最大数量 + 1, i)
.如果真 (当前总价 + (i - 1) × 商品列表 [当前索引].单价 > 预算)
到循环尾 ()
.如果真结束
临时数量 [当前索引] = i - 1
递归搜索方案 (当前索引 + 1, 当前总价 + (i - 1) × 商品列表 [当前索引].单价, 临时数量)
.计次循环尾 ()
.子程序 显示结果
.局部变量 i, 整数型
.局部变量 剩余, 小数型
剩余 = 预算 - 最优方案.总花费
调试输出 (“最优方案:”)
.计次循环首 (5, i)
.如果 (最优方案.数量 [i] > 0)
调试输出 (商品列表 [i].名称 + “×” + 到文本 (最优方案.数量 [i]) + “ 小计:” + 到文本 (最优方案.数量 [i] × 商品列表 [i].单价))
.否则
.如果结束
.计次循环尾 ()
调试输出 (“总花费:” + 到文本 (最优方案.总花费))
调试输出 (“剩余金额:” + 到文本 (剩余))
|
|