何も考えない全探索で簡単に片が付きます。
seed(List):-
member(Siki,[N*(N+1)//2,N*N,N*(3*N-1)//2,N*(2*N-1),
N*(5*N-3)//2,N*(3*N-2)]),
findall([E1,E2],(between(1,500,N),E is Siki,E>=1000,E<10000,E1 is E//100,E2 is E mod 100),List).
lists(All):-
findall(E,seed(E),All).
search([],N,N,[]).
search(All,N,First,[E|Result]):-
select(List,All,All1),
member([N,N1],List),
E is N*100+N1,
search(All1,N1,First,Result).
sum([],Sum,Sum):-!.
sum([X|Xs],Sum,Result):-
Sum1 is Sum+X,
sum(Xs,Sum1,Result).
main:-lists([Top|All]),
member([L,R],Top),
search(All,R,L,Ans),
Num is L*100+R,
sum([Num|Ans],0,Ans1),
write(Ans1).
最終更新:2014年12月12日 02:34