大学入学共通テスト(情報) 過去問
令和5年度(2023年度)追・再試験
問41 (<旧課程>情報関係基礎(第3問) 問10)

このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。

問題

大学入学共通テスト(情報)試験 令和5年度(2023年度)追・再試験 問41(<旧課程>情報関係基礎(第3問) 問10) (訂正依頼・報告はこちら)

次の文章を読み、問いに答えよ。

ある個別指導塾では、午後の時間帯を、第1時限から第5時限までの五つの時限に分けて講義を開講している。受講生は時限を指定して、指導を受ける。
時限ごとに受講生数をまとめたところ、第1時限から順に10、8、19、14、7(人)となった。この個別指導塾では、一対一での指導を行っている。そのため、講義を開講するには、この受講生数と同じ人数の講師を各時限に割り当てる必要がある。
講師は、複数の時限の講義を連続して担当することがある。そこで、塾の講師割り当て担当者は、講師の人数を担当開始時限・終了時限ごとにまとめた担当表を作成することにした。
はじめに、各講師が一つの時限のみを担当する場合を考え、表3の担当表を作成した。これは、表の開始時限と終了時限が等しい要素(以下、対角要素と呼ぶ。)に、各時限の受講生数と同じ講師人数を記したものである。表の合計値が58であることから、その日に出勤して講義を担当する講師の人数が58人であることがわかる。なお、以下では担当表の「開始時限k,終了時限s」の要素を【k,s】と表記する。

ここでは3時限以上連続で担当する場合について考えていく。
例えば、第2時限から第4時限まで3時限連続で担当する講師をn人設定する場合、【2,4】にnを記したうえで、表3の網掛けで示した人数8、19、14をnずつ減らすことになる。

ここで、【2,4】に設定できる人数の上限について考える。【2,4】にnを設定するには、網掛けで示した人数をnずつ減らす必要があるが、担当表には負の人数は記せない。そのため、【2,4】に設定できる人数の上限は、表3の網掛けで示した「該当する対角要素」の最小値である8となる。
以下、【k,s】に設定できる人数の上限を【k,s】に記し、担当表を書き換える操作を【k,s】に着目した集約と呼ぶ。表3に対して、【2,4】に着目した集約を行った後の担当表は表4になる。
【k,s】に着目した集約を行う手続きを作成していくうえでは、まず【k,s】に設定できる人数の上限を求める必要がある。そこで、ある時限帯(開始時限~終了時限)に対応する「該当する対角要素」の最小値を求める手続き(図2)を作成した。この手続きでは、開始時限をhajime、終了時限をowariに格納して時限帯を指定すると、2次元配列Hyouを参照し、最小値をsaisyouに格納する。なお、最小値を求めるうえでは、まずHyouの対角要素のhajime番目に格納された値をsaisyouの初期値としている。その後、対角要素のowari番目までに格納された値について、順番にsaisyouと比較している。
表3の初期状態の担当表の人数が2次元配列Hyouに格納されている状態で、図2の手続きを実行し、開始時限に1、終了時限に5を入力したとき、(06)行目の処理は( サ )回実行される。

( コ )にあてはまるものを1つ選べ。
問題文の画像
  • 0
  • hajime
  • owari
  • saisyou
  • i
  • Hyou[hajime,hajime]
  • Hyou[hajime,owari]
  • Hyou[owari,owari]
  • Hyou[hajime,i]
  • Hyou[i,i]
  • Hyou[i,owari]

次の問題へ

正解!素晴らしいです

残念...

この過去問の解説 (2件)

01

(06)行目は「saisyou ← (コ)」という代入処理です。(05)の条件「saisyou>Hyou[i,i]」が真のとき、より小さい値Hyou[i,i]でsaisyouを更新します。よって(コ)=Hyou[i,i]です。

選択肢1. 0

0を代入するとsaisyouが常に0になり、以降の比較が成立しなくなります。誤りです。

選択肢2. hajime

hajimeは開始時限の番号です。対角要素の値ではないため、saisyouの更新値にはなりません。

選択肢3. owari

owariは終了時限の番号です。Hyouの値ではないので誤りです。

選択肢4. saisyou

saisyouにsaisyouを代入しても値は変わりません。更新処理として意味をなさないため誤りです。

選択肢5. i

iはループカウンタで時限番号です。Hyouの要素の値ではないため誤りです。

選択肢6. Hyou[hajime,hajime]

Hyou[hajime,hajime]は初期値として既にsaisyouに代入済みです。ループ中の更新値として使うのは不適切です。

選択肢7. Hyou[hajime,owari]

Hyou[hajime,owari]は開始〜終了間の連続担当要素で対角要素ではありません。最小値の更新には使いません。

選択肢8. Hyou[owari,owari]

Hyou[owari,owari]は終了時限の対角要素ですが、ループのすべての反復で同じ値を代入することになり、最小値の更新として不正確です。

選択肢9. Hyou[hajime,i]

Hyou[hajime,i]はiによっては対角要素にならない場合があります。更新値として使うのは誤りです。

選択肢10. Hyou[i,i]

(05)でsaisyou>Hyou[i,i]が真と判明したとき、より小さい値はHyou[i,i]です。(06)でsaisyouにHyou[i,i]を代入することで最小値が更新されます。正解です。

選択肢11. Hyou[i,owari]

Hyou[i,owari]はiとowariが異なる場合は対角要素ではありません。最小値の更新値として不適切です。

まとめ

(05)の条件「saisyou>Hyou[i,i]」が真のとき、Hyou[i,i]の方が小さいのでsaisyouを Hyou[i,i]で更新します。(コ)=Hyou[i,i]が正解です。

参考になった数0

02

開始時限と終了時限を指定して、該当する対角要素の最小値を求めるに当たり、便宜上の最小値を表す変数saisyouの値と、開始時限の次の時限から終了時限までの対角要素に格納された値を、順番に比較する処理を(05)行目で行いました。

 

そこでsaisyouよりも小さな値があった場合、(06)行目で変数saisyouの値を書き換える処理を行います。

選択肢10. Hyou[i,i]

(05)行目では変数saisyouと、hajime+1、hajime+2…owariまでを表す変数iを使った2次元配列Hyou[i,i]を比較しています。

そこでsaisyouの値の方が大きかった場合、(06)行目では変数saisyouの値を書き換えるのですが、ここで新たな最小値になるのは、先ほどsaisyouと比較して、saisyouよりも小さかったHyou[i,i]の値です。

 

こうして更新されたsaisyouの値は、また次のHyou[i,i]と比較され、値が大きければ同じようにHyou[i,i]の値で書き換えられるのです。

参考になった数0