« 年間予定表を作成する | トップページ | 0以下は0に、その他はそのままにする »

2011年1月22日 (土)

2011年センター試験、数学プログラム問題

2011年センター試験、数学プログラム問題が
新聞に載っていたので
それについてです。
問題全文は1月17日の新聞を参照してください。

問題を最初から解いている場面を想定したレポートです。

ん~今年はどんな問題かなー
え~っと

nを2以上の自然数とし
nが偶数ならば、nを2で割る。
nが奇数なら、nを3倍にして1を加える。
この操作をnが1になるまで繰り返す。

例えば10の場合は、

10 → 5 → 16 → 8 → 4 → 2 → 1

F(N)がNから始めて1になるまでの操作の回数で

F(10) = 6

で最初の問題はF(6)とF(11)を出すのね。
手で書いて出せばいいね。
矢印は省略するけど、

6 3 10 5 16 8 4 2 1
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

あとは数えて~
F(6) = 8 
F(11) = 14

5が出てからは当然ながら
5 16 8 4 2 1
と同じだね。

次はプログラム中の空欄を埋める問題
[エ]は
もしIが1ならもう操作しなくてもいいから
190、200、210のどれかだけど
確定できないから飛ばし。

次は[オ][カ][キ]の空欄ね~
オカキってせんべいを連想しちゃったよ~
こんな時に、
[オ]と[カ]と[キ]ね。

まず[オ]、
Iが偶数ならする操作ってことで
LET I=I/2

[カ]は~
残りの選択肢は
「GOTO」系か
「Cの計算」系かしかないからー
そんでもってCはCountのCだから操作の回数をいれる変数。
それで、
GOTOはやっぱり
Iが1かどうか確かめる130行に戻るわけだし
戻る前にCを1増やしとかないといけないので
C = C+1

[キ]はGOTO 130

これで[エ]がわかるね。
[エ]は[キ]GOTO 130の後行の210。

[ク]はN=24のとき180行が実行される回数か~
180行は、LET I=3*I+1
なのでIが奇数のときに実行される。
だから手で書いて奇数のときを数えればいい。

24 12 6 3 10 5 16 8 4 2 1

奇数は3と5の2回よって[ク]は2。

次からは恒例のプログラム一部変更問題だね。

F(N) <= 10 になるNだけ表示するようにするわけね~

For文でNを1からMまで変化させて
それぞれのF(N)を求めて
IF文でF(N) <= 10かどうかを判定するという流れ。

今更だけど、
F(N)はプログラム中ではCだね。

今までのプログラムをFor文で挟むだけみたいだから
簡単?かもね~

[ケ]は、「○○のときCを出力する」だから
当然C<=10。

[コ]は、選択肢の中に「NEXT」があるよ。
そういえばForに対するNextがまだないね。
FORの変数はNだから
[コ]は、NEXT N

ここでプログラムの基本中の基本を出すか~

次は最後の問題[サ]
変更後のプログラムでM=10を入れると
210行のPRINT文は何回実行されるか?

ん~っと
210行のPRINT文は
C<=10のとき実行されるから、
Nが1から10までのF(N)を手で書いて求めて
F(N)<=10になるNの数を数えれば解けるね。

まずは1から10までの数字を書く。

N 1 2 3 4 5 6 7 8 9 10
F(N)

F(1) = 0
F(2) = 2
F(4) = 3
F(8) = 4
F(10) = 6
は簡単。
F(10)は問題文中に書いてあるし~

N 1 2 3 4 5 6 7 8 9 10
F(N) 0 1 2 4 6

F(5)はこれを再利用すれば出るね。
10 → 5 → 16 → 8 → 4 → 2 → 1
つまり
5 → 16 → 8 → 4 → 2 → 1
でF(5)=5

他にも再利用できるものがないか探してみると
F(6)とF(11)を解いたとき書いたヤツが使えるかも…
ってF(6)ももうわかってるね。

6 3 10 5 16 8 4 2 1
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

だから
F(6)=8
F(3)=7

N 1 2 3 4 5 6 7 8 9 10
F(N) 0 1 4 2 5 8 4 6

残りは7と9。
大きいほうの9からF(N)を求めよう。
途中で7が出てくるかもしれないし…

9 28 14 7

おっ、7来た。

9 28 14 7 22 11 34 …

11って前に出てきたよね。えっと
F(11) = 14
つまり9も7もF(N)は10より大きい。

N 1 2 3 4 5 6 7 8 9 10
F(N) 0 1 4 2 5 8 × 4 × 6

[サ]は8、終わり。

ってな感じでできたらいいですよね~

問題中のプログラムをVBAでやってみます。

コードはこちら

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

Sub macro110122a()
'センター試験2011
'数学プログラム問題
'問題は2011/01/17の新聞で

    Dim N As Integer
    Dim I As Integer
    Dim C As Integer
   
    N = InputBox("2以上10^5以下の自然数Nを入力してください")
    Let I = N
    Let C = 0
Step130:
    If I = 1 Then GoTo Step210
    If Int(I / 2) * 2 = I Then
        Let I = I / 2
        GoTo Step190
    End If
    Let I = I * 3 + 1
Step190:
    C = C + 1
    GoTo Step130
Step210:
    Debug.Print ("F(" & N & ") = " & C)
   
    'End
End Sub


Sub macro110122b()
'センター試験2011
'数学プログラム問題(変更後)
'問題は2011/01/17の新聞で

    Dim N As Integer, M As Integer
    Dim I As Integer
    Dim C As Integer
   
    M = InputBox("2以上10^5以下の自然数Mを入力してください")
    For N = 1 To M
        Let I = N
        Let C = 0
Step130:
        If I = 1 Then GoTo Step210
        If Int(I / 2) * 2 = I Then
            Let I = I / 2
            GoTo Step190
        End If
        Let I = I * 3 + 1
Step190:
        C = C + 1
        GoTo Step130
Step210:
        If C <= 10 Then Debug.Print ("F(" & N & ") = " & C)
    Next N
   
    'End
End Sub

macro110122a実行中のダイアログ
Nの値を入力する。
Vba20110122a

macro110122a実行後のイミディエイト例
Vba20110122b

macro110122b実行中のダイアログ
Mの値を入力する。
Vba20110122c

macro110122b実行後のイミディエイト例
Vba20110122d

今年の問題は2段階目のひねりが
少ないように感じました。

|

« 年間予定表を作成する | トップページ | 0以下は0に、その他はそのままにする »

コメント

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

トラックバック


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

« 年間予定表を作成する | トップページ | 0以下は0に、その他はそのままにする »