-3
 ONE +
 ONE +
 TWO =
______
FOUR

任何人都可以逐步解决这个密码算法吗 谢谢

4

1 回答 1

0

Prolog可以做到!(毕竟这是 Stackoverflow 并且您已经标记了您的问题

solution(O, N, E, T, W, F, U, R) :-
    /* All different */
    select(O, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], L1),
    select(N, L1, L2),
    select(E, L2, L3),
    select(T, L3, L4),
    select(W, L4, L5),
    select(F, L5, L6),
    select(U, L6, L7),
    member(R, L7),

    /* Constraints */
    FOUR is F * 1000 + O * 100 + U * 10 + R,
    ONE is O * 100 + N * 10 + E,
    TWO is T * 100 + W * 10 + O,

    FOUR is ONE + ONE + TWO.

总体思路是先选择所有变量,然后检查拼图条件。

现在

?- solution(O,N,E,T,W,F,U,R).

将打印找到的第一个解决方案。和:

?- aggregate_all(count, (solution(O,N,E,T,W,F,U,R)), Count).

您可以看到有173不同的解决方案。

跟踪查询的执行允许您按顺序查看作为查询的一部分执行的所有目标,以及它们是否成功(它还允许您查看 Prolog 回溯时发生的步骤):

?- trace, solution(O,N,E,T,W,F,U,R).

(您可以使用在线 SWI-Prolog平台来玩示例)。


传统上(在口头算术中):

每个字母应该代表一个不同的数字,并且(如在普通算术符号中)多位数字的前导数字不能为零。一个好的谜题应该有一个独特的解决方案,字母应该组成一个短语。

您可以强制“前导数字不得为零”规则添加:

not(O = 0), not(T = 0), not(F = 0).

无论如何,这个问题有多种解决方案。

于 2016-09-05T08:43:58.640 回答