大学入学共通テスト(情報) 過去問
令和4年度(2022年度)追・再試験
問33 (<旧課程>情報関係基礎(第3問) 問1)
問題文
Eさんは英小文字だけによる長さ8文字のパスワードを使っているが、悪意を持った第三者が長さ8のあらゆる文字列をもれなく試せば、いずれはパスワードを当てられてしまうことに気付いた。そこでEさんは、プログラムを作る練習としてこのことをコンピュータで確かめてみることにした。
Eさんは初めに、自分が使っているパスワードと、プログラムで生成する文字列の一つとが一致するか確かめる手続きを作成することにした。なお、ここでは8文字ちょうどのパスワードだけを考えることにする。
自分が使っているパスワードを正解文字列と呼び、配列Seikaiの要素Seikai[0]からSeikai[7]に順に1文字ずつ格納されているとする。また、プログラムで生成する文字列を候補文字列と呼び、配列Kouhoの要素Kouho[0]からKouho[7]に順に1文字ずつ格納されているとする。Eさんは、候補文字列と正解文字列で一致している文字を数え、文字列全体が一致しているときに候補文字列を表示する手続きを図1のように作成した。
Eさんは次に、英小文字だけによる8文字の候補文字列を「aaaaaaaa」から「zzzzzzzz」まで規則的にもれなく生成するため、次のような文字列と数値列の対応を考えることにした。1文字は26種類の英小文字のいずれかであるから、aを0に、bを1に、……、zを25に対応させることにすれば、図2のように数値の配列Suutiと候補文字列を一対一に対応づけることができる。この対応を利用して、配列Suutiの数値を1ずつ変化させることで次々と候補文字列を生成することができる。図3のように、aからzまでの文字が配列Moziに格納されているとき、Kouho[i]は配列Suutiを使って( ウ )と表せる。
( ア )にあてはまるものを次のうちから1つ選べ。
このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。
問題
大学入学共通テスト(情報)試験 令和4年度(2022年度)追・再試験 問33(<旧課程>情報関係基礎(第3問) 問1) (訂正依頼・報告はこちら)
Eさんは英小文字だけによる長さ8文字のパスワードを使っているが、悪意を持った第三者が長さ8のあらゆる文字列をもれなく試せば、いずれはパスワードを当てられてしまうことに気付いた。そこでEさんは、プログラムを作る練習としてこのことをコンピュータで確かめてみることにした。
Eさんは初めに、自分が使っているパスワードと、プログラムで生成する文字列の一つとが一致するか確かめる手続きを作成することにした。なお、ここでは8文字ちょうどのパスワードだけを考えることにする。
自分が使っているパスワードを正解文字列と呼び、配列Seikaiの要素Seikai[0]からSeikai[7]に順に1文字ずつ格納されているとする。また、プログラムで生成する文字列を候補文字列と呼び、配列Kouhoの要素Kouho[0]からKouho[7]に順に1文字ずつ格納されているとする。Eさんは、候補文字列と正解文字列で一致している文字を数え、文字列全体が一致しているときに候補文字列を表示する手続きを図1のように作成した。
Eさんは次に、英小文字だけによる8文字の候補文字列を「aaaaaaaa」から「zzzzzzzz」まで規則的にもれなく生成するため、次のような文字列と数値列の対応を考えることにした。1文字は26種類の英小文字のいずれかであるから、aを0に、bを1に、……、zを25に対応させることにすれば、図2のように数値の配列Suutiと候補文字列を一対一に対応づけることができる。この対応を利用して、配列Suutiの数値を1ずつ変化させることで次々と候補文字列を生成することができる。図3のように、aからzまでの文字が配列Moziに格納されているとき、Kouho[i]は配列Suutiを使って( ウ )と表せる。
( ア )にあてはまるものを次のうちから1つ選べ。
- c←0
- c←1
- c←c−1
- c←c+1
正解!素晴らしいです
残念...
この過去問の解説 (3件)
01
正解は「c←c+1」です。
【正解文字列:Eさんが使っているパスワード】
配列Seikaiの要素Seikai[0]からSeikai[7]に順に1文字ずつ格納されています。
例えば正解文字列が「password」の場合、要素Seikai[0]にはp、Seikai[1]にはaが格納されています。
【候補文字列:プログラムで生成する文字列】
配列Kouhoの要素Kouho[0]からKouho[7]に順に1文字ずつ格納されています。
例えば候補文字列が「passtest」の場合、要素Kouho[0]にはp、Kouho[1]にはaが格納されています。
問題文の「候補文字列と正解文字列で一致している文字を数え、」が図1の(02)~(04)の処理に該当し、
「文字列全体が一致しているときに候補文字列を表示する」が図1の(05)~(07)の処理に該当します。
図1の(01)で変数cが登場しているので、これを使って候補文字列と正解文字列で一致している文字を数えます。
例えばi=0のとき、つまりKouho[0]のpと、Seikai[0]のpは一致するので、cの値を1増やします。
「c←c+1」という書き方は、左側のcに「現在のcに1足した値」を代入することを意味します。
参考になった数0
この解説の修正を提案する
02
この問題における c とは何の意味があるかを考えましょう。
Kouho[i] = Seikai[i] と比較しているのは、それぞれパスワードの i 文字目 と
候補文字列の i文字目が一致しているかを確かめるものです。
ですので、パスワード のうち何文字分ががあっているかを、
c という文字を使ってカウントすればよいとわかり、8桁が一致すれば、
候補文字列を表示すれば良いとわかります。
この問題では、 i文字目がそれぞれ一致した場合 c に1加算すればよいので、
c ← c + 1 が正解となります。
参考になった数0
この解説の修正を提案する
03
この問題のポイントは、候補文字列が正解文字列と何文字一致している状況であるかをどうカウントするかを考えることです。
図1を見ると、1行目で変数cが定義されており、このcを使えばいいことがわかります。
6行目で条件をc=8として、3行目でKouho[i]とSeikai[i]が一致するたびにcを1ずつ増やすことで、8文字すべてが一致したときに配列Kouhoを出力できます。
よって、正解はcを1増やすことを意味する c ← c + 1になります。
数学と違って、プログラムにおける c ← c + 1は、cの数値を1増やすことを意味することに注意しましょう。
参考になった数0
この解説の修正を提案する
前の問題(問32)へ
令和4年度(2022年度)追・再試験 問題一覧
次の問題(問34)へ