2014年3月12日水曜日

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

Problem 24 「辞書式順列」 

順列とはモノの順番付きの並びのことである. たとえば, 3124は数 1, 2, 3, 4 の一つの順列である. すべての順列を数の大小でまたは辞書式に並べたものを辞書順と呼ぶ. 0と1と2の順列を辞書順に並べると
012 021 102 120 201 210
になる.
0,1,2,3,4,5,6,7,8,9からなる順列を辞書式に並べたときの100万番目はいくつか?

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

解法
Prolog言語
計算するだけ

search([],_,Ans):-!,reverse(Ans,Ans1),write(Ans1).
search(X,Num,List):-
       !,
       length(X,Len),
       Len1 is Len-1,
       fact(Len1,F),
       P is (Num-1) // F,
       Num1 is Num - P*F,
       nth0(P,X,E),
       select(E,X,X1),
       search(X1,Num1,[E|List]).


main24:-
       search([0,1,2,3,4,5,6,7,8,9],1000000,[]).

0 件のコメント:

コメントを投稿