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

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

問題

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

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

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 プレイヤーの名前を手番の順に表示する手続き

(01)p←sento

(02)iを1からnまで1ずつ増やしながら,

(03)¦( ウ )を表示する

(04)¦p←( エ )

(05)を繰り返す

 

(03)には、

プレイヤーの名前を表示させるために、

( ウ )に入るべき変数は、

プレイヤーの名前が格納されている2次元配列の要素である、

Player[p,1]となります。

 

以下の記述にある通り、

 

変数pを用いて手番の並びをn人分たどりながら、(03)行目でプレイヤーの名前を表示する手続きとなっている。

 

処理の流れ的には、

(04)の処理を経た後、

iがnになるまで1ずつ増やしながら、

(03)の処理に戻り、

Player[p,1]を表示される処理が行われます。

 

(04)の処理の後、

(03)に戻った際に次の並びとなるプレイヤーの名前を表示させるためには、

(03)の前の処理である、

(04)では変数pに次の並びとなるプレイヤーの行番号が入る必要があります。

次の並びとなるプレイヤーの行番号は、

2次元配列Player[xxx,2]の要素を示しています。

 

上記に従うと、

(03)では、

Player[p,1]を表示

(04)では、

現在の行番号であるpの次の行番号を示す

Player[p,2]をpに代入

という流れになります。

 

なお、

2次元配列Playerの行番号が「i」である選択肢がありますが、

変数iは1からn人分増加する変数を示しています。

 

先頭のプレイヤーが「高橋」の場合に、

先頭だけを表示させると、

変数iは(02)の処理で1つ増えるため2となります。

(03)で「高橋」を表示させるためには、

Player[i, xxx]の形式の場合、

iは「高橋」の行番号である「5」が入る必要がありますが、

この段階でiは2なので、

2次元配列Playerの行番号が「i」となっていること自体、

誤りです。

選択肢1. sento

不正解

sentoは先頭のプレイヤーの行番号を格納している変数のため、

次の並びとなるプレイヤーの行番号を示すものではありません。

選択肢2. p+1

不正解

プレイヤーの行番号を1つ加算した値(p+1)が、

pに代入されることを示しており、

一見正解に近いように見られます。
 

ただし、

現在の順番であるプレイヤーの次の行番号が、

1加算された値であれば問題ありませんが、

表1ではそのようになっていないため誤りです。

※行番号「5」である「高橋」の次の行番号は「3」

選択肢3. Player[p,p]

不正解

次の並びとなるプレイヤーの行番号は、

列番号「2」の2次元配列Playerの要素に格納されるため、

列番号「p」の部分が誤りです。

選択肢4. Player[p,1]

不正解

次の並びとなるプレイヤーの行番号は、

列番号「2」の2次元配列Playerの要素に格納されるため、

列番号「1」の部分が誤りです。

選択肢5. Player[p,2]

正解

冒頭の説明の通り、

Player[p,2]が選択肢としては、

正解となります。

選択肢6. Player[sento,p]

不正解

次の並びとなるプレイヤーの行番号は、

列番号「2」の2次元配列Playerの要素に格納されるため、

列番号「p」の部分が誤りです。

選択肢7. Player[i,1]

不正解

冒頭の説明の通り、

2次元配列Playerの行番号が「i」となっていること自体、

誤りです。

選択肢8. Player[i,2]

不正解

冒頭の説明の通り、

2次元配列Playerの行番号が「i」となっていること自体、

誤りです。

選択肢9. Player[i,p]

不正解

冒頭の説明の通り、

2次元配列Playerの行番号が「i」となっていること自体、

誤りです。

参考になった数0