[VB-07] 0 から 9 がランダムに並ぶ数列
$a_0$ と $a_1$ は $0$ から $9$ のランダムな数をとるものとし、$a_3$ 以降は次のような規則で項を作るものとします。
・前の $2$ 項を足し合わせて $9$ を超えなければ、足した数字を新しい項とします。
・前の $2$ 項を足し合わせて $9$ を超えたときは、足した数字の一の位を新しい項とします。
このような規則で作られる数列を初項から $10$ 項並べるプロシージャをつくってください。
VB-07 のヒント (Rnd関数を使います)
・0 ~ 1 の乱数は Rnd関数で得られますが、この関数を上手く利用して 0 ~ 9 の整数の乱数をつくります。
・一の位の数字を取得する方法を考えましょう。
VB-07 の解答
[1] 10 個の要素をもつ配列 a(9) を宣言します
[2] Randomizeステートメント で乱数ジェネレータを初期化します
[3] Rndは 0 以上 1 未満の乱数を生成するジェネレータです。
a, b を整数 (a < b) とするとき、a ~ b の一様乱数を生成する場合は
と記述します。a(0) と a(1) には 0 ~ 9 の乱数を入れるので、a = 0, b = 9 として
a(1) = Int(10 * Rnd)
と記述します。
[4] a(1) を a(2) を加えて 9 を超えない場合は、その値を a(3) とします。
9 を超える場合は a(1) + a(2) を 10 で割った余り を a(3) とします。
[5] [4] と同じようにして、a(4), a(5), ...... a(9) をつくります。
VB-07 の解答コード
Sub RandomSequence()
Dim k As Long
'10個の要素をもつ配列を定義
Dim a(9) As Long
'乱数ジェネレータの初期化
Randomize
'1 ~ 9 の整数乱数
a(0) = Int(10 * Rnd)
a(1) = Int(10 * Rnd)
'a(2) ~ a(9) を生成
For k = 2 To 9
a(k) = a(k - 1) + a(k - 2)
'a(k) が 10 以上の場合
If a(k) > 9 Then
'a(k) を 10 で割った余り
a(k) = a(k) Mod 10
End If
Next k
'a(k) を並べて表示
For k = 0 To 9
Debug.Print a(k);
Next k
End Sub
RandomSequenceマクロを実行すると、
のような結果が表示されます(実行するたびに異なる数列が表示されます)。