僕の嫌いな「待ち行列モデル」の問題だが、あまり待ち行列っぽくない問題であった。プログラムについては動作全体の把握するまで付き合わなくても、問われている箇所だけ答えていけば解ける問題であった。


アについては図1にそのまま載っている。
イ・ウについても表1の情報を図1に追記していけばよい
エ・オは、前の人の体験が終わったあとに到着すれば、その人の到着時間が開始時刻になる、ということである。
ア:9
イ:2
ウ:4
エ:3
オ:0


共通テストのプログラミングの問題は、変数はtaikenのようにすべて小文字、配列はTouchakuのように大文字から始まる。今年も昨年に続いて、配列の添え字は0からではなく1からである。また、そのプログラムが何をするためのものかは、「図2 2人目以降の来訪者の待ち時間を求めるプログラム」のようにタイトルで示されているため、これを先に把握することが短時間で解答するための大きなヒントになる。
問1で解答した内容が非常に重要である。あらためて定義してみると、
◆開始時間:直前の人の終わり(①Shuryou[i-1])より遅く到着した場合は本人の開始時間(②Touchaku[i])、またはそれ以外は直前の人の終わり時間 ←いずれかの遅い(値の大きい)方
◆終了時間:開始時間+3分(taiken)後
◆待ち時間:本人の開始時間(②Kaishi[i])―本人の到着時間(②Touchaku[i])
このプログラムは配列「Kaishi」に2人目以降の開始時間、配列「Shuryou」に開始時間の3分後となる数値を入力していくプログラムであることが分かれば、あとは定義をあてはめていくだけである。
カ:1
キ:2
ク:5
ケ:2
コ:2


このプログラムも、タイトルを見ると何を求めるのかが分かりやすい。「図3 最長待ち時間が10分間未満となる体験時間を調べるプログラム」と書いてある。
3行目は体験時間が1分から15分でそれぞれ待ち時間がどうなるか、プログラムを15回実行して調べることになっている。「10分間以上は待たせられない」ということで待ち時間が10分を超えた時点でループから脱出させるために、3行目は
「( taiken <= 15 ) and ( シ )の間繰り返す:」シは ②saichou < 10
(体験が15分以下 かつ 最長待ち時間が10分未満)に変更した。
12行目は、これまでの最長待ち時間と、今回の最長待ち時間を比較して大きい方を最長待ち時間とする行になる。そのため、サは③saichou。
スはプログラムが始まる際の変数の初期値の入力、セはwhileループ脱出のためのパターンなので、プログラミングの問題を解き慣れていれば即答である。
ソについては「配列Kaishiの初期化処理の実行回数は‥[ソ]回となった」とあるが、図4でプログラムを4回実行した時点で待ち時間が8分間になって止まった=5回目の実行で10分を越えてループが終了したことになる。これに気が付けば答えが5だと即答できる。時間を限られた試験ではとても重要。僕は体験時間5分の表を作って確認したけれど(体験時間5分だと10分待ちが発生する)。
サ:3
シ:2
ス:0
セ:2
ソ:5



コメントを残す