经典的SEND + MORE = MONEY问题
对于一个集合【S,E,N,D,M,O,R,Y】,每个字母代表一个数字,使得等式成立。
这里用Minizinc语言中的alldifferent全局变量,顾名思义,数组中的所有元素都不相同。
使用前需要提前引如alldifferent.mzn文件或者globals.mzn
代码如下:
% SEND + MORE = MONEY
include "alldifferent.mzn";
var 1..9: S;
var 0..9: E;
var 0..9: N;
var 0..9: D;
var 1..9: M;
var 0..9: O;
var 0..9: R;
var 0..9: Y;
constraint 1000*S + 100*E + 10*N + D
+ 1000*M + 100*O + 10*R + E
= 10000*M + 1000*O + 100*N + 10*E + Y;
constraint alldifferent([S,E,N,D,M,O,R,Y]);
solve satisfy;
output ["\(S)\(E)\(N)\(D) + \(M)\(O)\(R)\(E) = \(M)\(O)\(N)\(E)\(Y)"];