RANDOMIZE PRINT PRINT "ミニビンゴゲーム シミュレーション" PRINT " 3×3マス 中央フリー 1 〜 24 の数" PRINT PRINT " 1 2 3" PRINT " 4 * 5" PRINT " 6 7 8" PRINT PRINT " 上記のカードが何回のシュートで上がるか?" PRINT " 1000回やってみます。" PRINT DIM FL(24),S(5),T(24),A(1000),DOSU(1000),RUISEKI(24) FUNCTION RND24(q) ! 1〜24を乱数で出す。ただし1度出た数はださない。 DO LET X=INT(RND*24)+1 LOOP UNTIL FL(X)=0 LET FL(X)=1 LET RND24=X END FUNCTION SUB sort(a(),m) FOR i=1 TO m-1 FOR j=i+1 TO m IF a(i)>a(j) THEN LET Q=a(j) LET a(j)=a(i) LET a(i)=Q END IF NEXT j NEXT i END SUB SUB BINGO(W) FOR i=1 TO 24 LET T(i)=RND24(i) NEXT i !###################################################################### !2行目または2列目または斜めで上がるときのシュート数(W)を求める !###################################################################### FOR i=24 TO 1 STEP -1 FOR j=i-1 TO 1 STEP -1 IF T(i)+T(j)=9 THEN LET S(1)=i END IF NEXT j NEXT i !########################################################################## !1または3行目または1または3列目で上がるときのシュート数(WW)を求める !########################################################################## FOR i=24 TO 1 STEP -1 FOR j=i-1 TO 1 STEP -1 FOR k=j-1 TO 1 STEP -1 LET G=T(i)+T(j)+T(k) LET H=T(i)*T(j)*T(k) IF G=11 AND H=24 THEN LET S(2)=i ELSEIF G=16 AND H=120 THEN LET S(3)=i ELSEIF G=6 AND H=6 THEN LET S(4)=i ELSEIF G=21 AND H=336 THEN LET S(5)=i END IF NEXT k NEXT j NEXT i CALL sort(S,5) LET W=S(1) MAT FL=ZER END SUB !###################################################################### ! ここからメインプログラム !###################################################################### LET f=0 FOR m=1 TO 1000 CALL BINGO(W) LET A(m)=W LET f=f+W NEXT m FOR i=1 TO 1000 FOR j=1 TO 24 IF A(i)=j THEN LET DOSU(j)=DOSU(j)+1 END IF NEXT j NEXT i FOR n=1 TO 24 LET U=0 FOR i=1 TO n LET U=U+DOSU(i) NEXT i LET RUISEKI(n)=U NEXT n FOR i=1 TO 24 PRINT USING "##":i; PRINT "回目: "; PRINT USING "###": DOSU(i); PRINT "回 "; PRINT USING "##.###":ROUND(DOSU(i)/10,4); PRINT "% 累積 "; PRINT USING "###.###":ROUND(RUISEKI(i)/10,54); PRINT "%" NEXT i PRINT PRINT "平均 ";f/1000;"回" PRINT END