KM-47情報Ⅰ 対策問題

共通テスト過去問チャレンジ令和8年度 本試験

令和8年度本試験 第3問 問2 Yさんは問1で整理した考え方に基づき、昨年の6人目までの来訪者の到着時刻を用いて2人目以降の来訪者の待ち時間を求めるプログラムを作成した(図2)。 (01)行目の変数 taiken は体験時間を表す変数で、昨年の体験時間(3分間)を表す数値を代入している。配列 Touchaku、Kaishi、Shuryou はそれぞれ、各来訪者の到着時刻、開始時刻、終了時刻を格納する。すべての配列の添字は1から始まり、来訪者の到着順を表している。配列 Touchaku の各要素には来訪者の到着時刻を設定し、配列 Kaishi、Shuryou の各要素は0で初期化する。(03)行目では、関数「要素数」を用いて変数 kyakusu に来訪者数を代入する。(06)行目では、1人目の終了時刻を設定する。(07)〜(10)行目の繰り返しでは、i番目の来訪者の開始時刻、終了時刻、待ち時間を順に求める。関数「最大値(x, y)」は、引数として与えられた二つの値の最大値を返す。 図2の空欄カ・キ(順不同)とクに入れる組合せとして最も適当なものを選べ。

KM-47の問題図版
解答・解説を見る

正解: 1

正答

1

問題の整理

前問までに確認した待ち行列の規則をプログラムに翻訳します。

  • 開始時刻 = 「直前の人の終了時刻」と「本人の到着時刻」の遅い方(max)
  • 終了時刻 = 本人の開始時刻 + 体験時間

翻訳の鍵は添字です。ループ変数 i が「いま処理している来訪者」を指すので、本人= [i]、直前の人= [i−1] と書き分けます。

解き方

  1. カ・キ (最大値の2つの引数): 規則の「直前の人の終了時刻」は Shuryou[i−1]、「本人の到着時刻」は Touchaku[i]。よって (08)行は
    Kaishi[i] = 最大値(Shuryou[i−1], Touchaku[i])
  2. ク (終了時刻): 「本人の開始 + 体験時間」なので Kaishi[i] + taiken です。
  3. 検算として i=3(3人目)で動かすと: 最大値(Shuryou[2]=6, Touchaku[3]=4) = 6 → Kaishi[3]=6、Shuryou[3]=6+3=9。手作業の結果と一致します ✓

誤答を見分ける強力なチェック法が「その変数は、この時点で計算済みか?」です。Shuryou[i] を最大値の引数に使う選択肢は、この行の次の行でこれから計算する値を先に使ってしまっており、実行すると初期値の0が使われて計算が壊れます。ループでは「[i−1]はもう計算済み、[i]はいま計算中」という時間の流れを常に意識しましょう。

選択肢の確認

1.○ 直前=[i−1]、本人=[i]、終了=開始+体験時間。
2.× 開始の判定に、本人でなく前の人の到着時刻を使っている。
3.× Shuryou[i]はまだ計算されていない値(次の行で決まる)。
4.× 到着が直前の人のもので、終了の式も意味をなさない。

ここだけは覚えよう

本人=[i]、直前=[i−1]、そして「計算済みの値しか使えない」 — 空欄の変数が計算済みかを必ず確かめる。

関連問題

KM-46KM-48