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でやってみます。
コードはこちら
Sub macro110122a() Dim N As Integer Sub macro110122b() Dim N As Integer, M As Integer |
macro110122a実行中のダイアログ
Nの値を入力する。
macro110122a実行後のイミディエイト例
macro110122b実行中のダイアログ
Mの値を入力する。
macro110122b実行後のイミディエイト例
今年の問題は2段階目のひねりが
少ないように感じました。
| 固定リンク
この記事へのコメントは終了しました。

コメント