You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clingo ASP硬币兑换问题:同面值求和与全解输出方法

原代码核心问题

你写的初始代码有两个逻辑错误,无法满足需求:

  • 选择规则{selected(I)}是布尔选择,仅支持每种硬币选0或1枚,不支持同面值多选
  • 求和逻辑仅累加选中硬币类型的单枚面值,没有按实际选取数量计算总金额
修正后实现代码
% 定义所有可用硬币面值,单位统一为美分
coins(1; 2; 5; 10; 20; 50; 100; 200).
#const goal = 200.

% 每种面值硬币可选取0到「总金额/单枚面值」枚,确保单种硬币选取总面值不超目标
{count(C, N) : N = 0..goal/C} = 1 :- coins(C).

% 约束:所有选取硬币的总面值恰好等于200美分(即2美元)
:- #sum{C*N, C : count(C, N)} != goal.

% 配置输出:展示每个可行方案中各面值硬币的选取数量
#show count/2.
运行配置方法
  • 输出所有可行答案集:在命令行执行clingo命令时加上参数0,表示不限制枚举的答案集数量,命令格式为:
    clingo 你的代码文件名.lp 0
  • 快速获取组合总数:如果不需要查看每个具体组合的明细,只需要最终组合数,额外加上--quiet=1参数即可,命令格式为:
    clingo 你的代码文件名.lp 0 --quiet=1
  • 结果查看:clingo运行结束后,输出末尾统计行Models后跟随的数字,就是凑出2美元的所有可行组合总数,该场景下正确结果为73682。

内容的提问来源于stack exchange,提问作者Heaglock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:21:19