|
> No.3512[元記事へ]
GAIさんへのお返事です。
> トランプを一枚ずつ出していき、出したカードの数の合計がすべて合成数(素数になったら終わりのルール)になって全てのカードが掃けることを起こしたい。
> そのようにできるスタートのトランプの配列を求めるプログラムは作れますか?
下記のプログラムは貪欲なアルゴリズムにより
1通りの並べ方を探索します。全探索は行っていません。
DIM CARD(52)
RANDOMIZE
FOR I=1 TO 52
LET CARD(I)=MOD(I-1,13)+1
NEXT I
FOR I=1 TO 52
LET J=INT(RND*52)+1
SWAP CARD(I),CARD(J)
NEXT I
LET S=0
FOR K=1 TO 52
FOR I=1 TO 52
IF CARD(I)<>0 AND ISPRIME(S+CARD(I))=0 THEN EXIT FOR
NEXT I
IF I>52 THEN
PRINT "探索失敗です"
STOP
END IF
LET S=S+CARD(I)
PRINT K;":";CARD(I),S
LET CARD(I)=0
NEXT K
END
EXTERNAL FUNCTION ISPRIME(X)
LET ISPRIME=0
FOR I=2 TO SQR(X)
IF MOD(X,I)=0 THEN EXIT FUNCTION
NEXT I
LET ISPRIME=1
END FUNCTION
|
|