※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


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).