|
> No.2953[元記事へ]
GAIさんへのお返事です。
> 例として5角形の頂点にあるラベルを
> (1,-2,0,-1,3)を初期状態として(s=1)推移の様子を記述してみると
> (-1,2,-2,-1,3)
> (-1,0,2,-3,3)
> (-1,0,-1,3,0)
> (1,-1,-1,3,-1)
> (0,1,-2,3,-1)
> (0,-1,2,1,-1)
> (-1,1,1,1,-1)
> (1,0,1,1,-2)
> (-1,0,1,-1,2)
> (-1,0,0,1,1)
> (1,-1,0,1,0)
> (0,1,-1,1,0)
> (0,0,1,0,0)
> と13回目でストップする。
!赤字補填ゲーム
DATA 5 !個数
DATA 1,-2,0,-1,3 !値
READ N
DIM B(0 TO N-1)
MAT READ B
MAT PRINT B; !debug
LET S=0
FOR i=0 TO N-1
LET S=S+B(i)
NEXT i
PRINT "総和=";S
LET C=0 !回数
DO
FOR i=0 TO N-1 !最初に見つかったもの
IF B(i)<0 THEN EXIT FOR
NEXT i
IF i>N-1 THEN EXIT DO !すべてが非負なら、終了!
LET T=-B(i) !反転
LET B(i)=T
LET B(MOD(i-1,N))=B(MOD(i-1,N))-T !両隣から反転させた値を引く
LET B(MOD(i+1,N))=B(MOD(i+1,N))-T
MAT PRINT B; !状態を表示する
LET C=C+1
LOOP
PRINT C;"回"
END
実行結果
1 -2 0 -1 3
総和= 1
-1 2 -2 -1 3
1 1 -2 -1 2
1 -1 2 -3 2
0 1 1 -3 2
0 1 -2 3 -1
0 -1 2 1 -1
-1 1 1 1 -1
1 0 1 1 -2
-1 0 1 -1 2
1 -1 1 -1 1
0 1 0 -1 1
0 1 -1 1 0
0 0 1 0 0
13 回
|
|