2014年3月10日月曜日

プロジェクトオイラー問4

Problem 4 「最大の回文積」 

左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である.
では, 3桁の数の積で表される回文数の最大値を求めよ

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%204


解法
Prolog言語
公式サイトに記載されてる解答例通り実装。


palindrome(N):-
number_codes(N,List),
reverse(List,List).

setB(A,990,11):-A mod 11>0,!.
setB(_,999,1):-!.

roopB(_,B,_,MaxPalindrome,MaxPalindrome):-B<100,!.
roopB(A,B,_,MaxPalindrome,MaxPalindrome):-
A*B=<MaxPalindrome,
!.
roopB(A,B,_,_,MaxPalindrome):-
MaxPalindrome is A*B,
palindrome(MaxPalindrome),
!.
roopB(A,B,Dell,MaxPalindrome,Result):-
!,
B1 is B-Dell,
roopB(A,B1,Dell,MaxPalindrome,Result).

roopA(A,MaxPalindrome,MaxPalindrome):-A<100,!.
roopA(A,MaxPalindrome,Result):-
!,
setB(A,B,Dell),
roopB(A,B,Dell,MaxPalindrome,MaxPalindrome1),
A1 is A-1,
roopA(A1,MaxPalindrome1,Result).
main4:-
roopA(999,0,Ans),

write(Ans).

0 件のコメント:

コメントを投稿