まずは、問1で整理した表1をもう一度確認しましょう。
表1では、各来訪者について、 「到着時刻」 「開始時刻」 「終了時刻」 「待ち時間」 を順に求めていました。
問2のプログラムは、この表で行った計算をプログラムで表したものです。最終的に各配列に入る値は、以下のとおりです。
情報活用編プラス
第6章「IT技術を使って問題解決をしよう」
IP05-06
大学入学共通テスト2026年 第3問にチャレンジ+総まとめPart1
ここからは、第3問の問2を確認していきましょう。
問2は、問1で整理した「開始時刻・終了時刻・待ち時間」の考え方を、プログラムで表す問題です。
いよいよプログラムですね。
図や表なら追えたけど、コードになると急に難しく見えます。
でも、問1でやった計算をプログラムに置きかえているだけなら、順番に見れば分かりそうです。
その通りです。今回は、プログラムを読む前に、まず「何を計算したいのか」を確認しましょう。
大切なのは、開始時刻・終了時刻・待ち時間の求め方です。
ポイント
プログラム問題では、いきなり空欄だけを見るのではなく、「その行で何を求めているのか」を先に考えます。
今回の出題テーマ
配列と繰り返し処理、待ち時間のシミュレーション
この問題は、配列に入っている値を使って、来訪者ごとの開始時刻・終了時刻・待ち時間を順に計算する問題です。


配列 Touchaku、Kaishi、Shuryou が出てきますね。
名前を見ると、Touchaku は到着時刻、Kaishi は開始時刻、Shuryou は終了時刻を表していそうです。
はい。変数名から役割を読み取ることも、プログラム問題では大切です。
空欄がたくさんあって、どれから考えればいいのか迷います。
まずは、プログラムの目的を確認しましょう。
このプログラムは、2人目以降について、開始時刻・終了時刻・待ち時間を順番に求めています。
つまり、問1で表を埋めた作業を、プログラムで順番に行うということですね。
まずは、問1で整理した表1をもう一度確認しましょう。
表1では、各来訪者について、 「到着時刻」 「開始時刻」 「終了時刻」 「待ち時間」 を順に求めていました。
問2のプログラムは、この表で行った計算をプログラムで表したものです。最終的に各配列に入る値は、以下のとおりです。
次に、プログラムの01〜05行目を確認します。
ここでは、計算に使う値や配列を最初に準備しています。
01〜05行目で準備しているもの
01行目: taiken に、1人あたりの体験時間である 3分 を入れています。
02行目: Touchaku は到着時刻を入れる配列です。 Touchaku[i] は、i人目の到着時刻を表します。
03行目: kyakusuu には、配列 Touchaku の要素数、つまり来訪者の人数を入れています。
04行目: Kaishi は開始時刻を入れる配列です。 Kaishi[i] は、i人目の開始時刻を表します。
05行目: Shuryou は終了時刻を入れる配列です。 Shuryou[i] は、i人目の終了時刻を表します。
ここで大切なのは、 i が「今注目している来訪者」 を表していることです。
例えば、i = 3 なら3人目、i = 5 なら5人目を表します。
そのため、今の来訪者を i 人目とすると、 直前の人は i − 1 人目 です。
つまり、 Shuryou[i − 1] は、 「直前の人の終了時刻」 を表しています。
確認しよう
i 人目の待ち時間を求めるには、まず i 人目の開始時刻を求める必要があります。
開始時刻は、 本人の到着時刻と 直前の人の終了時刻のうち、遅い方です。
そのため、(08)行目の
Kaishi[i] = 最大値( カ , キ )
には、 本人の到着時刻である Touchaku[i] と、 直前の人の終了時刻である Shuryou[i − 1] が入ります。
したがって、 カ ・ キ は、 ① Shuryou[i − 1] と ② Touchaku[i] です。
なお、問題文に「カ・キの解答の順序は問わない」とあるため、①と②はどちらの順番でも正解です。
最大値を使うのは、「遅い方の時刻」を選ぶためなんですね。
はい。次に、終了時刻を考えましょう。
終了時刻は、開始時刻 + 体験時間で求めます。
Shuryou[i] = ク
i 人目の開始時刻は Kaishi[i]、 体験時間は taiken なので、 終了時刻は Kaishi[i] + taiken です。
よって、 ク は ⑤ Kaishi[i] + taiken です。
ここは問1の「終了時刻=開始時刻+体験時間」と同じですね。
その通りです。最後に、待ち時間を表示する部分を確認しましょう。
待ち時間は、開始時刻 − 到着時刻で求めます。
表示する(i,"人目の待ち時間:", ケ − コ ,"分間")
i 人目の開始時刻は Kaishi[i]、 i 人目の到着時刻は Touchaku[i] です。
したがって、 ケ は ② Kaishi[i]、 コ は ② Touchaku[i] です。
ここで注意したいのは、 ケ と コ の解答群は別々なので、同じ②でも意味が違うことです。
07行目から10行目のプログラムは、同じ処理を2人目から順番に繰り返しているんですね。
ただ、読むだけだと本当に正しく計算できているか少し不安です。
いいですね。
プログラム問題では、処理を途中で止めるようにして、変数や配列の値を一つずつ確認することが大切です。
画面の表を見るだけではなく、自分で値を書き込んで確認するということですね。
その通りです。
その通りです。まずは、下の表を紙に書き写して、i = 2 から順番に、「?」の値を埋めてみましょう。
| i | 到着時刻 Touchaku[i] |
直前の終了時刻 Shuryou[i−1] |
開始時刻 Kaishi[i] |
終了時刻 Shuryou[i] |
待ち時間 Kaishi[i]−Touchaku[i] |
|---|---|---|---|---|---|
| 2 | 3 | 3 | 最大値(3, 3) = ? | ? + 3 = ? | ? − 3 = ? |
| 3 | 4 | ? | 最大値(4, ?) = ? | ? + 3 = ? | ? − 4 = ? |
| 4 | 10 | ? | 最大値(10, ?) = ? | ? + 3 = ? | ? − 10 = ? |
| 5 | 11 | ? | 最大値(11, ?) = ? | ? + 3 = ? | ? − 11 = ? |
| 6 | 12 | ? | 最大値(12, ?) = ? | ? + 3 = ? | ? − 12 = ? |
書き写して確認しよう
ポイントは、1行ずつ順番に埋めることです。 たとえば i = 3 の「直前の終了時刻」は、 1つ前の行で求めた Shuryou[2] を使います。
このように、前の行で求めた値を次の行で使うため、 途中の計算を紙に残しておくとミスを減らせます。
では、実際に埋めた結果を確認してみましょう。
| i | 到着時刻 Touchaku[i] |
直前の終了時刻 Shuryou[i−1] |
開始時刻 Kaishi[i] |
終了時刻 Shuryou[i] |
待ち時間 Kaishi[i]−Touchaku[i] |
|---|---|---|---|---|---|
| 2 | 3 | 3 | 最大値(3, 3) = 3 | 3 + 3 = 6 | 3 − 3 = 3 |
| 3 | 4 | 6 | 最大値(4, 6) = 6 | 6 + 3 = 9 | 6 − 4 = 2 |
| 4 | 10 | 9 | 最大値(10, 9) = 10 | 10 + 3 = 13 | 10 − 10 = 0 |
| 5 | 11 | 13 | 最大値(11, 13) = 13 | 13 + 3 = 16 | 13 − 11 = 2 |
| 6 | 12 | 16 | 最大値(12, 16) = 16 | 16 + 3 = 19 | 16 − 12 = 4 |
確認しよう
各来訪者について、開始時刻は 最大値(本人の到着時刻,直前の終了時刻) で求めます。
終了時刻は 開始時刻 + 体験時間、 待ち時間は 開始時刻 − 到着時刻 です。
答えは、カ・キ=①・②(順不同)、ク=⑤、ケ=②、コ=②です。
理由:開始時刻は「本人の到着時刻 Touchaku[i]」と「直前の終了時刻 Shuryou[i−1]」の遅い方なので、 カ・キは①と②です。 終了時刻は Kaishi[i] + taiken なので、クは⑤です。 待ち時間は Kaishi[i] − Touchaku[i] なので、ケは②、コは②です。
間違えやすいポイント
・Touchaku[i] と Touchaku[i−1] を取り違える
・直前の人の終了時刻 Shuryou[i−1] ではなく、自分の終了時刻 Shuryou[i] を使ってしまう
・同じ②でも、解答群が違うと意味が変わることを見落とす
・待ち時間を「終了時刻 − 到着時刻」としてしまう
ある展示で、来訪者は到着した順番に1人ずつ体験します。 1人あたりの体験時間は4分です。
配列 Touchaku = [0, 2, 9] とし、 1人目の開始時刻を0分、終了時刻を4分とします。
2人目と3人目について、開始時刻・終了時刻・待ち時間を求めましょう。
まずは、1人目の情報を表に整理しましょう。 1人目は、開始時刻が0分、終了時刻が4分なので、待ち時間は0分です。
| 到着時刻 | 開始時刻 | 終了時刻 | 待ち時間 | |
|---|---|---|---|---|
| 1人目 | 0 | 0 | 4 | 0 |
| 2人目 | 2 | ? | ? | ? |
| 3人目 | 9 | ? | ? | ? |
開始時刻は、 本人の到着時刻と 直前の人の終了時刻 の遅い方です。
終了時刻は「開始時刻+体験時間」、 待ち時間は「開始時刻−到着時刻」で求めます。
2人目:開始時刻
2人目:終了時刻
2人目:待ち時間
3人目:開始時刻
3人目:終了時刻
3人目:待ち時間
※この再現版では提出は行いません(送信先は未接続です)