大学入学共通テスト(情報) 過去問
令和6年度(2024年度)追・試験
問32 (<旧課程>情報関係基礎(第3問) 問3)
問題文
Aさんはゲーム会社に勤務しており、複数のプレイヤーが参加するゲームでのプレイヤーの順番(以下、手番と呼ぶ。)を管理するプログラムを開発している。ここでは図1に示すように、「高橋」を先頭として「高橋」→「石村」→「天野」→「小池」→「渡辺」の順で時計回りに手番が進み、最後の「渡辺」の次は「高橋」に戻り、再び同じ順で手番が繰り返される例について考える。
Aさんは「プレイヤーの情報は配列で管理するが、ゲームでの手番は配列の並びにかかわらず、自由に順序を設定できるようにしてほしい」と指示を受けた。そこで、表1のように列1にはプレイヤーの名前、列2には「次のプレイヤー」の行番号を格納するデータの構造を考えた。列2は図1の矢印に相当し、「高橋」の次のプレイヤーを指し示す矢印は「石村」を指しているので、表1における「高橋」の行の列2には「石村」の行番号である3が入る。「石村」の次のプレイヤーは「天野」なので、「石村」の行の列2には( ア )が入る。最後の「渡辺」の次のプレイヤーは先頭の「高橋」なので、「渡辺」の行の列2には( イ )が入る。なお、設問の都合により、表1の一部は値を「?」で隠している。
Aさんは、表1をPlayerという名前の2次元配列で扱うことにした。表1の行番号と列番号を添字として用い、Player[<行番号>,<列番号>]と表す。ただし、行番号と列番号に0は用いないこととする。5行目の「高橋」を例にすると、名前は5行1列にあるため、Player[5,1]に「高橋」を格納し、次のプレイヤーの行番号は5行2列にあるため、Player[5,2]に3を格納する。
Aさんはこの配列を用いて、ゲームに参加しているすべてのプレイヤーの名前を、先頭から手番の順に表示する手続きを図2のように書いた。変数sentoは先頭のプレイヤーの行番号を、変数nはゲームの参加者数を、それぞれ格納している。変数pを用いて手番の並びをn人分たどりながら、(03)行目でプレイヤーの名前を表示する手続きとなっている。
図2 プレイヤーの名前を手番の順に表示する手続き
(01)p←sento
(02)iを1からnまで1ずつ増やしながら,
(03)¦( ウ )を表示する
(04)¦p←( エ )
(05)を繰り返す
( ウ )にあてはまるものを1つ選べ。
このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。
問題
大学入学共通テスト(情報)試験 令和6年度(2024年度)追・試験 問32(<旧課程>情報関係基礎(第3問) 問3) (訂正依頼・報告はこちら)
Aさんはゲーム会社に勤務しており、複数のプレイヤーが参加するゲームでのプレイヤーの順番(以下、手番と呼ぶ。)を管理するプログラムを開発している。ここでは図1に示すように、「高橋」を先頭として「高橋」→「石村」→「天野」→「小池」→「渡辺」の順で時計回りに手番が進み、最後の「渡辺」の次は「高橋」に戻り、再び同じ順で手番が繰り返される例について考える。
Aさんは「プレイヤーの情報は配列で管理するが、ゲームでの手番は配列の並びにかかわらず、自由に順序を設定できるようにしてほしい」と指示を受けた。そこで、表1のように列1にはプレイヤーの名前、列2には「次のプレイヤー」の行番号を格納するデータの構造を考えた。列2は図1の矢印に相当し、「高橋」の次のプレイヤーを指し示す矢印は「石村」を指しているので、表1における「高橋」の行の列2には「石村」の行番号である3が入る。「石村」の次のプレイヤーは「天野」なので、「石村」の行の列2には( ア )が入る。最後の「渡辺」の次のプレイヤーは先頭の「高橋」なので、「渡辺」の行の列2には( イ )が入る。なお、設問の都合により、表1の一部は値を「?」で隠している。
Aさんは、表1をPlayerという名前の2次元配列で扱うことにした。表1の行番号と列番号を添字として用い、Player[<行番号>,<列番号>]と表す。ただし、行番号と列番号に0は用いないこととする。5行目の「高橋」を例にすると、名前は5行1列にあるため、Player[5,1]に「高橋」を格納し、次のプレイヤーの行番号は5行2列にあるため、Player[5,2]に3を格納する。
Aさんはこの配列を用いて、ゲームに参加しているすべてのプレイヤーの名前を、先頭から手番の順に表示する手続きを図2のように書いた。変数sentoは先頭のプレイヤーの行番号を、変数nはゲームの参加者数を、それぞれ格納している。変数pを用いて手番の並びをn人分たどりながら、(03)行目でプレイヤーの名前を表示する手続きとなっている。
図2 プレイヤーの名前を手番の順に表示する手続き
(01)p←sento
(02)iを1からnまで1ずつ増やしながら,
(03)¦( ウ )を表示する
(04)¦p←( エ )
(05)を繰り返す
( ウ )にあてはまるものを1つ選べ。
- sento
- p+1
- Player[p,p]
- Player[p,1]
- Player[p,2]
- Player[sento,p]
- Player[i,1]
- Player[i,2]
- Player[i,p]
正解!素晴らしいです
残念...
この過去問の解説 (1件)
01
この問題で覚えておくべきポイントは以下の通りです。
先頭のプレイヤーの行番号である、
sentoを変数pに格納して、
iをカウントしてn人分たどりながら、
プレイヤーの名前を表示する処理を表したのが、
図2となります。
以下の記述よりプレイヤーの名前は、
2次元配列であるPlayer[<行番号>, 1]に
格納されると記載されていることに着目します。
(03)の処理で、
プレイヤーの名前を表示させるためには、
表示させるべき変数は、
2次元配列Player[xxx,1]である必要があります。
次に(03)で表示させる2次元配列Player[xxx,1]の要素である、
行番号(xxx)には何を格納させるのかを考えます。
図2の手続きは、
ゲームに参加しているすべてのプレイヤーの名前を、
先頭から手番の順に表示する処理とあります。
(03)で表示させる2次元配列Player[xxx,1]の行番号(xxx)には、
先頭のプレイヤーの行番号を格納している、
sentoもしくはp(sentoの値を代入した値)が入ることになります。
例えば、
先頭のプレイヤーが「高橋」の場合に、
先頭だけを表示させる処理に着目しましょう。
1) 「高橋」の行番号である「5」をsentoに格納
2) sentoの値をpに代入
3) iを1つ増やす
4) 先頭のプレイヤーである「高橋」の名前を表示する
4)で表示させる変数としては、
Player[<高橋の行番号>,1]となります。
<高橋の行番号>はpであるため、
Player[p,1]で表すことができ、
正解である(03)で表示させるべき変数となります。
なお、
2次元配列Playerの行番号が「i」である選択肢(Player[i, xxx])がありますが、
変数iは1からn人分増加する変数を示しています。
先頭のプレイヤーが「高橋」の場合に、
先頭だけを表示させると、
変数iは(02)の処理で1つ増えるため2となります。
(03)で「高橋」を表示させるためには、
Player[i, xxx]の形式の場合、
iは「高橋」の行番号である「5」が入る必要がありますが、
この段階でiは2なので、
2次元配列Playerの行番号が「i」となっていること自体、
誤りです。
不正解
sentoは先頭のプレイヤーの行番号を格納している変数のため、
プレイヤーの名前を示すものではありません。
不正解
sentoの値を代入した値がpですが、
p+1はプレイヤーの行番号を1つ加算した値のため、
プレイヤーの名前を示すものではありません。
不正解
2次元配列Playerの行番号は「p」で正しいですが、
プレイヤーの名前は、
列番号「1」の2次元配列Playerの要素に格納されるため、
列番号「p」は誤りです。
正解
冒頭の説明の通り、
Player[p,1]が選択肢として、
正解となります。
不正解
2次元配列Playerの行番号は「p」で正しいですが、
プレイヤーの名前は、
列番号「1」の2次元配列Playerの要素に格納されます。
2次元配列Playerの列番号「2」の要素には、
次のプレイヤーの行番号が格納されるため誤りです。
2次元配列Playerの行番号は「p」で正しいですが、
プレイヤーの名前は、
列番号「1」の2次元配列Playerの要素に格納されます。
2次元配列Playerの要素には、
列番号「1」か「2」である必要がありますが、
それ以外の列番号が格納される可能性がある「p」は誤りです。
冒頭の説明の通り、
2次元配列Playerの行番号が「i」となっていること自体、
誤りです。
冒頭の説明の通り、
2次元配列Playerの行番号が「i」となっていること自体、
誤りです。
冒頭の説明の通り、
2次元配列Playerの行番号が「i」となっていること自体、
誤りです。
参考になった数0
この解説の修正を提案する
前の問題(問31)へ
令和6年度(2024年度)追・試験 問題一覧
次の問題(問33)へ