ルールを変えて

 投稿者:GAI  投稿日:2014年 9月26日(金)20時00分18秒
  トランプを一枚ずつ出していき、出したカードの数の合計がすべて合成数(素数になったら終わりのルール)になって全てのカードが掃けることを起こしたい。
そのようにできるスタートのトランプの配列を求めるプログラムは作れますか?
また全部で何通りあるかも知りたい。
 

Re: ルールを変えて

 投稿者:しばっち  投稿日:2014年 9月28日(日)17時31分32秒
  > 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
 

戻る