[VBA] 0 から 9 がランダムに並ぶ数列

[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 の一様乱数を生成する場合は

Int((b - a + 1) * Rnd + a)

と記述します。a(0) と a(1) には 0 ~ 9 の乱数を入れるので、a = 0, b = 9 として

a(0) = Int(10 * Rnd)
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マクロを実行すると、

 2 7 9 6 5 1 6 7 3 0

のような結果が表示されます(実行するたびに異なる数列が表示されます)。

スポンサーリンク
スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください