【ExcelVBA公開模試】フロベニウス硬貨交換問題(その1補題)
文法を無視して、とりあえず動けばいいという邪道ExcelVBA講座こと「速読VBA単語」に準拠した問題を出題します。
問題
図1でセルB1、B2に2以上の整数値を入力する。セルB1の値を「A」、セルB2の値を「B」とする。ExcelVBAを用いて、次の各設問の処理を実行しなさい。
(1)AとBが互いに素(最大公約数が1)でなければ、「最大公約数が1ではない!」と表示しなさい。
(2)図2のようにセルA5以降にB行A列の表を出力したい。次のコードを完成させなさい。ただし、AとBが互いに素の場合は「最大公約数が1ではない!」と表示して終了する。
Sub kakko2()
a = Range("B1")
b = Range("B2")
For i = 1 To a
For j = 1 To b
Next
Next
End Sub
<図1>
<図2:設問(2)完成イメージ>
わえなび式 正解例
(このページの下にあります)
目標回答時間
プロ5分以内、アマチュア10分以内に処理ができたら合格
この問題の出題範囲
「速読VBA単語」Program3-9まで
ご案内
ExcelVBAをなんとなく理解できればいいという初心者のための「速読VBA単語」を受講希望の方はカリキュラムをご覧ください。
正解例
(1)aとbが、2~aのいずれかの整数で割り切れたら最大公約数が1ではないということです。
Sub kakko1()
a = Range("B1")
b = Range("B2")
For i = 2 To a
If i > b Then Exit For
If a Mod i = 0 And b Mod i = 0 Then
Debug.Print "最大公約数が1ではない!"
Exit Sub
End If
Next
End Sub
(2)iとj(行と列)が逆になっているのはフロベニウス硬貨交換問題(本題)を解くためです。
Sub kakko2()
a = Range("B1")
b = Range("B2")
For i = 2 To a
If i > b Then Exit For
If a Mod i = 0 And b Mod i = 0 Then
Debug.Print "最大公約数が1ではない!"
Exit Sub
End If
Next
For i = 1 To a
For j = 1 To b
c = (j - 1) * a + i
Cells(j + 4, i) = c
Next
Next
End Sub
バックナンバー
この記事が気に入ったらサポートをしてみませんか?