KM-95情報Ⅰ 対策問題

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

令和7年度本試験 第3問 Kさんは、工芸品の番号順に製作日数を並べた配列Nissu(添字は1から始まる)と、工芸品数9が代入された変数kougeihinsu、各部員が空きになる日付を管理する配列Akibi、部員数3が代入された変数buinsuを用いて、各工芸品の担当と期間を一覧にした図2のような文面を表示するプログラム(図5)を作成した。(10)行目で図2の1行分を表示し、(11)行目で担当部員が次に空きになる日付を更新する。Akibi[tantou]は担当部員が空きになる日付、すなわちその工芸品の作業を開始できる日を表す。配列Nissuの要素は各工芸品の製作日数であり、例えばNissu[1]=4は工芸品1の製作に4日かかることを表す。部員1が1日目から工芸品1(製作日数4日)を担当すると、図2の1行目のように「工芸品1 … 部員1:1日目〜4日目」と表示される。 製作日数がNissu[kougeihin]日のとき、空欄サ・シに入る組合せとして正しいものを選べ。

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

正解: 1

正答

1

問題の整理

「開始日から3日間作業したら、終了日は何日目か?」——プログラミングで最も間違えやすい「端の数え方(いわゆる±1問題)」です。具体的な数字で確かめるのが一番確実です。

開始が1日目で3日間の作業なら、作業するのは1・2・3日目。終了日は 1+3=4 ではなく 1+3−1 = 3日目 です。開始日自身が1日目として数えられるので、「開始+日数」だと1日多くなってしまいます。

解き方

  1. サ (終了日の表示): 終了日 = 開始日 + 製作日数 − 1。よってサ = Nissu[kougeihin] − 1 です。−1を忘れると、3日の作業なのに「1日目〜4日目」(4日間)と表示されてしまいます。
  2. シ (次に空きになる日付の更新): 作業が3日目までなら、その部員が次に空くのは4日目、つまり 開始日 + 製作日数(−1は不要)。よってシ = Nissu[kougeihin] です。

サとシで−1の有無が違うのは、「終了日(作業する最後の日)」と「空きになる日(作業しない最初の日)」という意味の違いがそのまま式に出ているからです。似た式でも指しているものが違う——これを見抜けるかがこの問題の核心です。

もう1つの罠は添字です。製作日数は工芸品ごとに決まるので Nissu[kougeihin]。Nissutantouとしてしまうと、まったく無関係の値を読んでしまいます。「この配列の添字は何の番号か」を常に確認しましょう。

選択肢の確認

1.○ 終了日=開始+日数−1、次の空き=開始+日数。
2.× サとシが逆。表示が1日長く、更新が1日短くなる。
3.× 終了日が1日ずれる(3日作業が4日間と表示される)。
4.× Nissuの添字は工芸品番号。部員番号では意味が違う。

ここだけは覚えよう

終了日=開始+日数−1、次の空き=開始+日数 — ±1は具体的な小さい数で必ず検算。

関連問題

KM-94KM-96