聘我网

新概念招聘3.0

如何用程序来解这个方程?

vote up0vote downstar
a+b+c+d=10

其中a,b,c,d是非负整数

 

1 个答复

vote up0vote downcheck

使用prolog的clp库

1 ?- use_module(library(clpfd)).
%  library(error) compiled into error 0.00 sec, 9,764 bytes
% library(clpfd) compiled into clpfd 0.05 sec, 227,496 bytes
true.

2 ?- Vars=[A,B,C,D],Vars ins 0..10,sum(Vars,#=,10),label(Vars).
Vars = [0, 0, 0, 10],
A = 0,
B = 0,
C = 0,
D = 10 ;
Vars = [0, 0, 1, 9],
A = 0,
B = 0,
C = 1,
D = 9 ;
Vars = [0, 0, 2, 8],
A = 0,
B = 0,
C = 2,
D = 8 ;
Vars = [0, 0, 3, 7],
A = 0,
B = 0,
C = 3,
D = 7 ;
...

其中

#=表示等于

ins表示在。。范围内

0..10表示0~10之间的整数

label用来搜索所有的可能解。

更新

不用clp库也可以这样实现:

range(X):-
        member(X,[0,1,2,3,4,5,6,7,8,9,10]).

ten(A,B,C,D):-
        range(A),
        range(B),
        range(C),
        range(D),
        10 =:= A + B + C + D.

其中member(X,[0,1,2,3,4,5,6,7,8,9,10])也可以表示成between(0,10,X)

链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.