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

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

問題

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

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

Eさんは英小文字だけによる長さ8文字のパスワードを使っているが、悪意を持った第三者が長さ8のあらゆる文字列をもれなく試せば、いずれはパスワードを当てられてしまうことに気付いた。そこでEさんは、プログラムを作る練習としてこのことをコンピュータで確かめてみることにした。

Eさんは初めに、自分が使っているパスワードと、プログラムで生成する文字列の一つとが一致するか確かめる手続きを作成することにした。なお、ここでは8文字ちょうどのパスワードだけを考えることにする。
自分が使っているパスワードを正解文字列と呼び、配列Seikaiの要素Seikai[0]からSeikai[7]に順に1文字ずつ格納されているとする。また、プログラムで生成する文字列を候補文字列と呼び、配列Kouhoの要素Kouho[0]からKouho[7]に順に1文字ずつ格納されているとする。Eさんは、候補文字列と正解文字列で一致している文字を数え、文字列全体が一致しているときに候補文字列を表示する手続きを図1のように作成した。

Eさんは配列Suutiの内容をすべての候補文字列に対応するように変化させるために、図4の手順を考えた。図4では、配列Suutiの8要素がすべて0である1番目から、左端のSuuti[0]を1ずつ増やしていき、26番目の次はSuuti[0]を0に戻してSuuti[1]を1増やす、という手順を繰り返している。268番目の次は1番目に戻るとする。配列Suutiの要素を変化させる際の一時的な状態を、図4では点線により示している。この方法ですべての候補文字列を順に得るために、次の候補文字列に対応するよう配列Suutiを変化させる手続きを、図5のように作成した。図4の268番目から1番目に戻るときに、変数jが配列Suutiをはみ出さないよう注意して変数mを設定した。また、変数tは図4の点線の状態を扱うためのものであり、a%bはaをbで割った余りを求める演算である。

( エ )にあてはまるものを次のうちから1つ選べ。
問題文の画像
  • 0
  • 1
  • 6
  • 7
  • 8
  • 25
  • 26
  • 27

次の問題へ

正解!素晴らしいです

残念...

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

01

正解は「7」です。

 

mは図5(06)のj<mで使われおり、jは配列Suutiの要素番号として使われています。

(05)よりjは0から始まり、(06)で判定してから(07)で1増やします。

 

つまり(06)の判定では、jは0~6である必要があるので、mは「7」が答えです。

仮にjを7まで許容してしまうと、(07)で1増えてj=8となり、配列Suutiの要素数8(要素番号0~7)を超えるため不適切です。

参考になった数0

02

この問題では、配列内の数字が 「26」になったらその部分を次の位に繰り上げをするという処理を求められます。

---

配列のうち Suuti[0] から Suuti[7] では、この繰り上げ処理ができます (8行目~9行目)

(7行目) で j ← j + 1 が実行されていることを踏まえて、

(6行目) では j<7 であるとわかります。

よって m ← 7 が正答となります。

参考になった数0

03

この問題のポイントは、図5で出てくる変数がそれぞれ何の操作をするためのものか考えることです。

 

2行目で定義されるmは6行目で" j < m"という条件で使用されています。

6行目から10行目のループでは繰り上げの処理が行われています。また、ここで使われているjはsuuti[j]と配列の番号を指定するために使われていることから、jが0~7の8個で抑える必要があります。

 

したがって、ループ内ではじめにj = j + 1が行われることを考慮すると、ループの条件はj < 7で抑える必要があります。

よって、正解は m = 7 になります。

参考になった数0