Problem 112 「はずみ数」 †
左から右までどの桁もその左の桁を下回らない数を増加数と呼ぶ. 例えば, 134468.
同様に, どの桁もその右の桁を下回らない数を減少数と呼ぶ. 例えば, 66420.
増加数でも減少数でもない正の整数をはずみ数と呼ぶことにする. 例えば, 155349.
100以下にはずみ数が無いのは明らかだが, 1000未満では半数を少し上回る525個がはずみ数である.
実際, はずみ数の割合が50%に達する最少の数は538である.
驚くべきことに, はずみ数はますます一般的になり, 21780でははずみ数の割合は90%に達する.
はずみ数の割合がちょうど99%になる最小の数を求めよ.
解法
1から単純に検証していきます。
それだけ。
is_doun([_]):-!.
is_doun([X,Y|Rest]):-
!,
X=<Y,
is_doun([Y|Rest]).
type(Num):-number_codes(Num,List),is_upper(List),!.
type(Num):-number_codes(Num,List),is_doun(List),!.
search(N,C1,C2):-C2>0,C1*99=:=C2,!,
Ans is N-1,
write(Ans).
search(N,C1,C2):-
type(N),
!,
C11 is C1+1,
N1 is N+1,
search(N1,C11,C2).
search(N,C1,C2):-
!,
C22 is C2+1,
N1 is N+1,
search(N1,C1,C22).
最終更新:2014年03月06日 05:17