KM-94|情報Ⅰ 対策問題
令和7年度本試験 第3問 Kさんが所属する工芸部では、文化祭に向けて複数の工芸品を部員全員で分担して製作しており、図の枠内の規則で各工芸品の担当と期間を割り当てていく。最も早く空きになる部員の番号を求めるために、各部員が空きになる日付を管理する配列Akibiを用意する。この配列の添字(1から始まる)は部員の番号であり、要素はその部員が空きになる日付である。 図4は、配列Akibiの要素と、部員数が代入された変数buinsuを用いて、次に割り当てる工芸品の担当部員を表示するプログラムである。変数tantouには暫定の担当部員の番号を入れておき、(04)〜(06)行目で部員2以降のAkibiの値を順に調べながら、条件(空欄キ)が成り立つたびにtantouを更新していく。 空欄キに入る式と、部員が5名に増えたため(01)行目を Akibi = [5, 6, 4, 4, 4] に、(02)行目を buinsu = 5 に変更して実行したときの(06)行目の代入の回数の組合せとして正しいものを選べ。

解答・解説を見る
正解: 1
正答
1
問題の整理
「配列の最小値(が入っている位置)を探す」——プログラミングの最重要パターンの1つです。型はこうです:
- 暫定の答え(tantou)を先頭の1にしておく
- 2番目以降を順に見て、暫定より小さい値が見つかったら暫定を更新する
「同着なら最小番号の部員」という条件も、この型が自動的に満たします(等しいときは更新しないので、先に見つかった小さい番号が残る)。
解き方
キの決定: 更新すべきなのは「いま見ている部員buinの空き日が、暫定担当tantouの空き日より早い(小さい)とき」です。比べるのは部員番号ではなく空きの日付なので、式は **Akibi[buin] < Akibi[tantou]** です。「>」にすると最大値(最も遅い部員)を探してしまい、「buin < tantou」は番号の比較で意味がありません。また「<」であって「≤」でないことが「同着なら最小番号」を保証します。
代入回数のトレース: Akibi = [5, 6, 4, 4, 4] で順に実行します。
- tantou=1 (Akibi[1]=5)
- buin=2: Akibi[2]=6 < 5? いいえ → 何もしない
- buin=3: Akibi[3]=4 < 5? はい → tantou=3 (代入1回目)
- buin=4: Akibi[4]=4 < Akibi[3]=4? いいえ(等しい) → 更新なし
- buin=5: 4 < 4? いいえ → 更新なし
代入は1回だけで、「次の工芸品の担当は部員3です。」と表示されます。4と5が更新されないのは「<」のおかげで、最小番号の3が正しく選ばれています。
選択肢の確認
1.○ 最小値の更新条件+トレースで代入1回(部員3)。
2.× 「>」では最も遅く空く部員を探してしまう。
3.× 4,4は等しく更新されないので3回にはならない。
4.× 部員番号どうしの比較には意味がない。
ここだけは覚えよう
最小値探索: 暫定を先頭に、「より小さい」なら更新 — 「<」が同着時に先の要素を残す。