KM-79情報Ⅰ 対策問題

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

令和8年度追・再試験 第3問 問3 (実際の図) クイズ研究部の部長のMさんは、部員から集めた問題(0から始まる番号が振られた全193問。各問題には情報・国語・歴史・音楽・地理・日常の6分野から一つが設定されている)からクイズ集を作っている。配列Bunyaは問題の番号を添字とし、各要素に分野の番号(0:情報、1:国語、2:歴史、3:音楽、4:地理、5:日常)を格納している。 Mさんは、問2の図5のプログラムを拡張し、4回の大会で使うための、問題が重複しない四つのクイズ集(1番〜4番)を作れるようにした(図6)。各問題は一つのクイズ集にのみ採用し、配列Saiyouの要素(0でないもの)が「何番のクイズ集に採用されたか」を表すようにした。(04)〜(10)行目は、変数cをクイズ集の番号(1〜4)として、4回繰り返す。(08)行目は、まだどのクイズ集にも採用されていない問題だけを採用するように条件を変えている。また、(09)行目は「何番のクイズ集に採用されたか」を記録するようにしている。 なお、「and」は「かつ」を意味する論理演算子であり、左右の式がともに真のときにだけ真となる。「or」は「または」を意味する論理演算子であり、左右の式のいずれか一方でも真のときに真となる。変数bには問題iの分野番号が入り、配列Mondaisuは分野ごとの採用問題数、saidaiは分野あたりの採用問題数の最大数である。空欄キには「Mondaisu[b] < saidai」が入る。 図6の(08)行目の空欄コ・サに入る組合せとして最も適当なものを選べ。

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

正解: 1

正答

1

問題の整理

採用の条件を「分野の上限チェック」と「重複チェック」の2つとも満たすときに絞る問題です。論理演算子の使い分けを確認します。

  • and (かつ): 両方の条件が真のときだけ真
  • or (または): どちらか一方でも真なら真

解き方

  1. サ (重複チェックの式): Saiyouの要素は「0で初期化し、採用されたらクイズ集の番号(1〜4)を入れる」仕組みです。つまり「まだどのクイズ集にも採用されていない」状態は Saiyou[i] == 0 で表せます。0を「未使用の印」として使う定番のテクニックです。
  2. コ (つなぎ方): 採用してよいのは「分野の採用数が上限未満」かつ「まだ未採用」の両方が成り立つときだけです。片方だけで採用してしまうと、上限を超えたり同じ問題が2つのクイズ集に入ったりします。よって and です。

or にした場合の壊れ方を具体的に考えてみましょう。すでに1番のクイズ集に採用済みの問題(Saiyou[i]=1)でも、分野の上限に余裕があれば「Mondaisu[b] < saidai が真」なので条件全体が真になり、2番のクイズ集にも採用されて重複してしまいます。「and か or かで迷ったら、片方だけ真のケースを想像して壊れないか確かめる」のが確実な検証法です。

なお、(09)行では「何番のクイズ集に採用されたか」が Saiyou[i] に記録されるので、次の周回(c=2以降)ではこの問題は Saiyou[i] == 0 が偽になり、自動的にスキップされます。

選択肢の確認

1.○ 上限内かつ未採用、の両方を満たすときだけ採用。
2.× orでは採用済みの問題が別のクイズ集にも入ってしまう。
3.× Saiyou[i] > 0 は「採用済み」の意味で、条件が逆。
4.× つなぎ方も条件も誤り。

ここだけは覚えよう

「〜かつ〜」の絞り込みは and。0は「未使用」の印に使える — 迷ったら片方だけ真のケースで検証。

関連問題

KM-78KM-80