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

Minizinc统计目标数组元素出现次数并构造统计数组的实现问题

正确实现方案

错误原因

你遇到的报错是几处用法错误导致的:

  • count 函数用法不符合MiniZinc语法要求,内置count的签名是count(待统计数组, 目标值),作用是统计数组中等于指定值的元素总数,你写的参数结构完全不匹配
  • 你尝试将forall直接赋值给数组的写法不符合语法规范,forall是约束关键词,需要配合constraint使用,不能直接作为值赋值给变量
  • 额外的小问题:你定义COUNT集合时结尾漏了分号,也会触发语法错误

完整可运行代码

% 定义统计的数字范围
set of int: DIGIT = 1..5;
% 定义允许的计数值取值范围
set of int: COUNT = {0,2,3,4};
% 你已生成的原始数组
array[int] of int: input_arr = [3,2,2,3,3,3,1,4,2,4,5,2,3];
% 定义存储每个数字出现次数的变量数组
array[DIGIT] of var COUNT: occurrence;

% 核心统计约束:每个数字i的出现次数等于input_arr中i的总数
constraint forall(i in DIGIT) (
    occurrence[i] = count(input_arr, i)
);

% 可在这里补充你需要的次数约束,比如非零次数最小限制示例:
% constraint forall(i in DIGIT where occurrence[i] > 0)(
%     occurrence[i] >= 2
% );

solve satisfy;

% 输出统计结果
output [
    "数字\(i) 出现次数:\(occurrence[i])\n"
    | i in DIGIT
];

说明

你可以根据自己的约束要求调整COUNT集合的取值范围,或者补充额外的次数限制规则,满足你后续的业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 22:12:03