« マルチコアとVBA | トップページ | ダブルクォーテーションをシングルクォーテーションに置換する »

2010年1月19日 (火)

センター試験数学のプログラム問題をVBAで

センター試験…
今はもう遠いむかしですね~

高校生の時
数学の教師にセンター入試のプログラムのことを
聞いたことがあったのですが
全く教えてもらえませんでした。

こんなもんも教えられないで
よくあの人たちは数学教師を
やっていられたなーと思います。
世の中 結構 甘いですね。

さて、今回のプログラム問題のテーマは
三角形の3辺の長さの関係についてでした。

つまり、
三角形で一番長い辺は
その他の2辺を足したものより小さい。
というやつです。

センター入試のプログラム問題は
最初にネタバレしてしまえば
すごい簡単なんですけど
徐々にネタバレっていうのが
常套手段です。
親切な誘導でもあります。

詳しい問題は2010年1月18日の新聞で確認してください。

問題:a + b + c = N なる自然数a、b、c の組の総数を求める。
ただしa <= b <= c

この条件より
aのとり得る値は

1 <= a <= Int(N/3)

bのとり得る値は

a <= b <= Int((N - a)/2)

とわかります。
a, b が決まれば c はただ1つです。
なので b がいくつあるかが
この問題の山場ですね~
問題番号でいうと「エ」の問題。

例えば
1<= b <= 4 の自然数は
1, 2, 3, 4 の4つです。
式で出そうとすると
4 - 1 + 1 = 4
この「+1」のところを忘れがちです。

上述の b のとり得る値より

b = Int((N - a)/2) - a + 1

になります。
これが問題「エ」の答えですね。

さて、VBAで実行できるように
最初のプログラムを書き直します。
INPUTは、InputBox
Printは、MsgBoxで代用してます。

センター試験2010 プログラムの問題のコード:

Sub macro100119a()
'センター試験2010 プログラムの問題
    Dim N, X, A As Integer
    N = InputBox("自然数Nを入力してください")
    X = 0
    For A = 1 To Int(N / 3)
        X = X + Int((N - A) / 2) - A + 1
    Next A
    MsgBox "N=" & N & "のとき、総数は" & X & "通りである"
End Sub

Nを入力します
Pic20100119a

結果は
Pic20100119b

次は行番号131-137の所です。

自然数Nを三角形の三辺の長さとなり得る三つの自然数a, b, c (a <= b <= c)の和として表 す方法をすべて列挙し、その総和を求める。

の箇所ですが
ようするに
自然数a, b, c (a <= b <= c) に
a + b > c という条件が増えるということです。

この条件が
三角形で一番長い辺は
その他の2辺を足したものより小さい。
にあたります。

コードはこちら
今度は表示する回数が多いので
PRINT を Debug.Printで代用して
イミディエイト ウィンドウに表示させてみました。

イミディエイト ウィンドウは
「表示」-「イミディエイト ウィンドウ」
で表示できます。

センター試験2010 プログラムの問題のコード2:

Sub macro100119b()
'センター試験2010 プログラムの問題
    Dim N, X, A, B, C As Integer
    N = InputBox("自然数Nを入力してください")
    X = 0
    For A = 1 To Int(N / 3)
        For B = A To Int((N - A) / 2)
            C = N - A - B
            If C < A + B Then
                Debug.Print "(" & A & ", " & B & ", " & C & ")"
                X = X + 1
            End If
        Next B
    Next A
    Debug.Print "N=" & N & "のとき、総数は" & X & "通りである"
End Sub

結果は
Pic20100119c

正直に言うと
存在は知っていたものの
イミディエイト ウィンドウを使ったことなかったですが
MsgBoxより断然便利。

今までMsgBoxにかなり時間を無駄にしました。
不覚でした。

|

« マルチコアとVBA | トップページ | ダブルクォーテーションをシングルクォーテーションに置換する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: センター試験数学のプログラム問題をVBAで:

« マルチコアとVBA | トップページ | ダブルクォーテーションをシングルクォーテーションに置換する »